Description

给定1~N的两个排列,使用这两个排列分别构建两棵二叉查找树(也就是通过往一棵空树中依次插入序列元素的构建方式)。如果这两棵二叉查找树完全相同,那么输出YES;否则输出NO。之后,输出第一个排列对应的二叉查找树的后序序列、层序序列。

Input

每个输入文件中一组数据。

第一行1个正整数N(1<=N<=30),表示二叉查找树中的结点个数。

接下来两行,代表1~N的两个排列。

Output

如果两个排列代表的二叉查找树完全相同,那么输出一行YES,否则输出一行NO。

接下来两行分别输出第一个排列对应的二叉查找树的后序序列、层序序列,整数之间用空格隔开。

每行末尾不允许有多余的空格。

Sample Input

5
4 2 1 3 5
4 5 2 3 1

Sample Output

YES
1 3 2 5 4
4 2 5 1 3

/**************************************************************Problem: 2943User: 201717010009Language: C++Result: AcceptedTime:0 msMemory:1720 kb
****************************************************************/
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<malloc.h>
#include<bits/stdc++.h>
using namespace std;
int n,num,a[100],b[100],i;
int Q1[100],Z1[100],Q2[100],Z2[100];
typedef struct BSTNode{int data;struct BSTNode *lchild;struct BSTNode *rchild;
}BSTNode,*PBSTNode;
PBSTNode insert(int data,PBSTNode *root){if(*root == NULL){*root=(PBSTNode)malloc(sizeof(BSTNode));(*root)->data=data;(*root)->lchild=NULL;(*root)->rchild=NULL;return *root;}if(data<(*root)->data)(*root)->lchild=insert(data,&( (*root)->lchild) );else if(data>(*root)->data)(*root)->rchild=insert(data,&( (*root)->rchild) );return *root;
}
void QX1(PBSTNode root){//得到第一序列的前序序列 if(root!=NULL){Q1[i++]=root->data;QX1(root->lchild);QX1(root->rchild);}
}
void ZX1(PBSTNode root){//得到第一序列的中序序列 if(root!=NULL){ZX1(root->lchild);Z1[i++]=root->data;ZX1(root->rchild);}
}
void QX2(PBSTNode root){//得到第二序列的前序序列 if(root!=NULL){Q2[i++]=root->data;QX2(root->lchild);QX2(root->rchild);}
}
void ZX2(PBSTNode root){//得到第二序列的中序顺序 if(root!=NULL){ZX2(root->lchild);Z2[i++]=root->data;ZX2(root->rchild);}
}
void HX(PBSTNode root){if(root!=NULL){HX(root->lchild);HX(root->rchild);printf("%d",root->data);if(num<n-1){cout<<" ";num++;}}
}
void CX(PBSTNode root){PBSTNode q[100];int w=1,t=1;//建队if(root==NULL){return ;}q[w++]=root;while(t!=w){if(q[t]->lchild!=NULL){q[w++]=q[t]->lchild;}if(q[t]->rchild!=NULL){q[w++]=q[t]->rchild;}cout<<q[t]->data;if(num<n-1){cout<<" ";num++;}t++;}
}
int main(){PBSTNode root1=NULL,root2=NULL;cin>>n;for(i=0;i<n;i++){cin>>a[i];insert(a[i],&root1);}for(i=0;i<n;i++){cin>>b[i];insert(b[i],&root2);}i=0;QX1(root1);i=0;ZX1(root1);i=0;QX2(root2);i=0;ZX2(root2);int flag=0;for(i=0;i<n;i++){//比较前序序列 if(Q1[i]!=Q2[i]){cout<<"NO"<<endl;flag=1;break;}}for(i=0;i<n;i++){//比较后序序列 if(flag==1)break;if(Z1[i]!=Z2[i]){cout<<"NO"<<endl;flag=1;break;}}if(!flag){cout<<"YES"<<endl;}num=0;HX(root1);cout<<endl;num=0;CX(root1);
}

【数据结构】进击的二叉查找树相关推荐

  1. 【关于封装的那些事】 缺失封装 【关于封装的那些事】 泄露的封装 【关于封装的那些事】 不充分的封装 【图解数据结构】二叉查找树 【图解数据结构】 二叉树遍历...

    [关于封装的那些事] 缺失封装 目录 - 缺失封装 为什么不能缺失封装? 缺失封装潜在的原因 未意识到关注点会不断变化 混合关注点 幼稚的设计决策 示例分析一 示例分析二 总结 缺失封装 没有将实现变 ...

  2. 数据结构:二叉查找树(C语言实现)

    数据结构:二叉查找树 二叉查找树 基础知识 关于二叉树的基础知识,请看我的一篇博客:二叉树的链式存储 二叉查找树的特征 二叉查找树或者是一棵空树,或者是具有下列性质的二叉树: 1.若其左子树不空,则左 ...

  3. 【图解数据结构】二叉查找树

    目录 二叉查找树定义 二叉查找树节点定义 插入节点 查找节点 查找最小值 查找最大值 查找特定值 删除节点 删除叶子节点 删除带有一个子节点的节点 删除带有两个子节点的节点 删除节点测试 二叉查找树定 ...

  4. 浅谈算法和数据结构: 七 二叉查找树

    前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构 ...

  5. 重学数据结构007——二叉查找树

    之前的博客中提到过,我学习采用的参考书是<数据结构与算法分析--C语言描述>.这门书的组织安排与国内广泛实用的教材<数据结构--C语言版>比较不同.这本书描述了一些树和二叉树的 ...

  6. 【数据结构】二叉查找树/二叉搜索树BST(附相关C++代码)

    文章目录 BST相关概念 BST如何添加节点 BST如何遍历 BST如何求最值 BST如何删除节点 BST如何查找节点 如何验证一棵树是BST 本文内容将主要介绍二叉查找树的相关概念,与关于二叉查找树 ...

  7. 数据结构笔记--二叉查找树概述以及java代码实现

    一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递 ...

  8. java二叉树插入节点_[javaSE] 数据结构(二叉查找树-插入节点)

    public class BSTree>{private BSTNodemRoot;/*** 定义二叉树 * *@authortaoshihan *@param **/ public class ...

  9. 数据结构:二叉查找树 BST 平均查找长度 ASL 的计算

    平均查找长度 ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数称为平均查找长度. 它的定义是这 ...

  10. 【Python数据结构】——二叉查找树(查找、构建、删除、插入、打印)

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/7/15 0:34 # @Author : @linlianqin # @Si ...

最新文章

  1. 多路径下使用ASMLIB创建ASM磁盘
  2. Android中的AsyncTask异步加载图片
  3. 质因数的个数 (分解质因数)
  4. apache ignite_使用Apache Ignite优化Spark作业性能(第1部分)
  5. phpstorm 不能自动打开上次的历史文件
  6. java httpclient 异步请求_Java利用httpasyncclient进行异步HTTP请求
  7. 前端常见跨域解决方案
  8. 用java画工作流流程图,java生成流程图
  9. TrueLicense 使用JDK自带的 keytool 工具生成公私钥证书库
  10. RAB, RB, SRB
  11. Spread控件使用说明_技术部分
  12. hive基本用法及细节记录
  13. 2021年度学习总结
  14. 神战奇迹服务器维护,神战奇迹手游官网
  15. Java抽象类与接口详解
  16. Tablespace free space
  17. SpringCloud版本Hoxton SR5 --- 第七讲:SpringCloud Config 分布式配置中心+整合bus、rabbitmq、actuator
  18. 使用Grunt生成雪碧图
  19. leetcode每日一题信息抓取 早安语录 定时任务
  20. 动态数组的使用之char *res=new char(strlen(src)+1)

热门文章

  1. 编写可靠shell脚本的8个建议
  2. php 用header()下载文件在firefox下没有后缀名
  3. HttpClient模拟客户端请求实例
  4. 程序猿的道路~~(How to be a programmer?)
  5. C#笔记30:Trace、Debug和TraceSource的使用以及日志设计
  6. Drools workbench kie-server部署和简单使用(全流程
  7. 关于Initializing Spring root WebApplicationContext解决方法
  8. JIRA中设置[描述]字段的默认值
  9. webserver/CGI
  10. sysrq 和 sysrq-trigger