//判断两棵树是否是同一棵树:先序遍历和中序遍历对应相同或者中序遍历和后序遍历对应相同
//代码思路:两个数组分别存放建好的树的先序遍历以及正序遍历结果,然后对比是否相等
//题目意思  这题是 HDU 3791
题目描述:
判断两序列是否为同一二叉搜索树序列
输入:
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
输出:
如果序列相同则输出YES,否则输出NO
样例输入:
2
567432
543267
576342
0
样例输出:
YES
NO#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct TiNode
{char data;struct TiNode *left,*right;
}TiNode,*BiTree;
char prearr[15],prearr2[15];
char midarr[15],midarr2[15];
void buildtree(BiTree &T,int x)//建树
{if(T==NULL){T=(BiTree)malloc(sizeof(BiTree));T->data=x;T->left=NULL;T->right=NULL;}else if(x<T->data){buildtree(T->left,x) ;}else if(x>T->data){buildtree(T->right,x); }
}
void Presearch(BiTree T,int &index)//先序遍历
{prearr[index++]=T->data;if(T->left!=NULL)Presearch(T->left,index);if(T->right!=NULL)Presearch(T->right,index);
}
void Midsearch(BiTree T, int &index)//中序遍历
{if(T->left!=NULL)Midsearch(T->left,index);midarr[index++]=T->data;if(T->right!=NULL)Midsearch(T->right,index);}
int main()
{int N,index;char str[15],str2[15];while(scanf("%d",&N)!=EOF&&N!=0){BiTree T=NULL;scanf("%s",str);for(int k=0;k<strlen(str);k++){buildtree(T,str[k]);//建树 }index=0;Presearch(T,index) ;prearr[index]='\0';strcpy(prearr2,prearr);index=0;Midsearch(T,index);midarr[index]='\0';strcpy(midarr2,midarr);for(int i=0;i<N;i++){T=NULL;scanf("%s",str2);for(int g=0;g<strlen(str2);g++){buildtree(T,str2[g]);}index=0;Presearch(T,index);prearr[index]='\0';if(strcmp(prearr,prearr2)!=0){printf("NO\n");continue;}index=0;Midsearch(T,index);midarr[index]='\0';if(strcmp(midarr,midarr2)!=0){printf("NO\n");continue;}printf("YES\n");free(T); }}return 0;
}//还是这个题意,我们换一种建树方法,这次采用静态建树的方法#include <iostream>
using namespace std;
#include <cstring>
#define MAX 666
int node[MAX];
int node2[MAX];
void makeTree(char *str,int *node)
{for(int i=0;str[i]!='\0';i++){int j=0;int t=str[i]-'0';while(node[j]!=-1){if(t>node[j])j=(j+1)*2;if(t<node[j])j=(j+1)*2-1;}node[j]=t;}
}
void compare()
{for(int i=0;i<MAX;i++)if(node[i]!=node2[i]){cout<<"NO"<<endl;return;}cout<<"YES"<<endl;
}
int main()
{int n;char str[12],str2[12];cin>>n;if(!n)return 0;memset(node,-1,sizeof(node));cin>>str;makeTree(str,node);int len=strlen(str);while(n--){memset(node2,-1,sizeof(node2));cin>>str2;int len2=strlen(str2);if(len!=len2){cout<<"NO"<<endl;continue;}makeTree(str2,node2);compare();}main();return 0;
}

BST 二叉搜索树 (动态建树与静态建树)相关推荐

  1. BST二叉搜索树插入节点建树并找出不平衡节点,networkx,Python

    BST二叉搜索树插入节点建树并找出失衡节点,networkx,Python import randomfrom matplotlib import pyplot as plt import netwo ...

  2. 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

    原文:http://blog.csdn.net/sup_heaven/article/details/39313731 数据结构中常见的树(BST二叉搜索树.AVL平衡二叉树.RBT红黑树.B-树.B ...

  3. CS61B -BST(二叉搜索树)

    CS61B - BST 什么是BST BST全名Binary search tree(二叉搜索树) BST的基本性质 BST可以是一棵空树 如果它的左树不为空,那么左树中的所有节点的值都小于根节点的值 ...

  4. PTA - 二叉搜索树的结构 (30 分)——建树,输入处理

    二叉搜索树的结构 (30 分) 文章目录 题意: 思路: 1. 如何建树? 2. 如何解决输入问题? 完整Code: 经验: 题意: 定义:二叉搜索树是一棵空树,或者是具有下列性质的二叉树: 若它的左 ...

  5. 在BST(二叉搜索树)中查找介于给定范围之内的值

    一.题目要求 编写一个递归函数printRange(),传入一个BST.一个较小的值和一个较大的值,按照顺序打印出介于两个值之间的所有结点.函数printRange()应尽可能少地访问BST的结点.( ...

  6. 二叉搜索树之:【BST】【基本应用汇合】

    Ⅰ 索树BST与平衡树Treap的区别,已经BST的基本功能介绍 二叉搜索树之:[二叉搜索树与平衡树的区别][BST和treap的区别]_bei2002315的博客-CSDN博客 Ⅱ 二叉搜索树的基本 ...

  7. (一)BST树(二叉搜索树)

    (一)BST树(二叉搜索树) 1.BST二叉搜索树 1.1BST树的定义 1 BST树也是一个二叉树,故满足递归定义; 2 其次每个节点只存在一个值; 3 需满足左子树值<=根值<=右子树 ...

  8. 五.树,二叉树,二叉搜索树(BST)和自平衡二叉搜索树(AVL)

    1.树 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构 树是由n个节点组成的集合: 如果 n=0, 那这是一颗空树 如果 n>0, 那存在1个节点作为树的根节点,其他节点可以分 ...

  9. 二叉搜索树BST红黑树

    二叉搜索树基础知识 提起红黑树咱们肯定要先说说这个二叉搜索树(BST) 二叉搜索树又叫二叉查找树,二叉排序树:它具有以下特点: 如果它的左子树不为空,则左子树上结点的值都小于根结点. 如果它的右子树不 ...

最新文章

  1. 自定义MyHttpServletRequest解决过滤器拦截@RequestBody整体JSON请求问题
  2. php 判断字符是否是数字_php判断输入是否是纯数字,英文,汉字的方法
  3. jboss启动初始页面_JBoss BRMS最佳实践– BPM流程初始化层的提示
  4. hive的SerDe序列化
  5. 如何使用modelarts训练海量数据
  6. 时间加减计算器_小学生苦练加减乘除计算“基本功”,有没有必要?
  7. AMD官宣350亿美元收购赛灵思 赛灵思大涨8.56%
  8. TextView显示html信息、在文本下面添加下划线、中划线、设置图片
  9. MS SQL Server存储过程的优点有哪些呢?
  10. POI设置单元格格式
  11. 有网友怒斥吾教程坑了他,阿弥陀佛
  12. linux 生成bmp,linux下生成bmp图片的测试程序
  13. 乌班图系统设置系统语言,以及中文输入法
  14. cad 2019 mac安装破解详细图文教程
  15. matlab方差 anov,MATLAB单因素方差分析
  16. matlab中rgb2ycbcr函数,RGB转YCbCr
  17. 你想要的宏基因组-微生物组知识全在这(2020.7)
  18. 为你的网站添加 htpps
  19. Chrome谷歌浏览器插件的本地存放位置
  20. 拟插值算子(Quasi-interpolations)

热门文章

  1. 社交软件Soul撤回IPO申请:上市只差临门一脚 腾讯是大股东
  2. 《两种文化》——读书报告
  3. wannafly summer camp day6
  4. 启动hadoop小技巧
  5. 关于手工双面板的一些想法。还没实践。
  6. 什么是城府?你做到了你就无敌了!
  7. 简单好用的免费内网穿透工具
  8. 东北大学和南邮的计算机,考研南邮跟东北大学通信与信息系统
  9. 2016Bytecup之菜鸟进阶
  10. LSP 语言服务协议