九度题目36:二叉搜索树(判断是否是相同二叉搜索树)
2013-03-09 21:45
337 查看
http://ac.jobdu.com/problem.php?cid=1040&pid=35
2010浙江大学计算机机试试题
1、两个二叉树相同:插入建树,先序遍历+中序遍历=一个字符串
比较两次得到的字符串,若相同才是相同二叉搜索树
2、两次遍历时,通过指针操作相应字符串,指针每次重定向到相应字符串的首地址
size使用:引用方式,同时改变相应值
2010浙江大学计算机机试试题
1、两个二叉树相同:插入建树,先序遍历+中序遍历=一个字符串
比较两次得到的字符串,若相同才是相同二叉搜索树
2、两次遍历时,通过指针操作相应字符串,指针每次重定向到相应字符串的首地址
size使用:引用方式,同时改变相应值
#include <stdio.h> #include <malloc.h> #include <string.h> struct Node { Node *left,*right; int data; }; char str[15],tmp[15]; //原始字符串,测试字符串 char *pre_in; //先序+中序遍历指针 char str_pre_in[30],tmp_pre_in[30];//相应的两个pre_in完全相同,才是同一二叉搜索树 int size1,size2; int i; void preorder(Node *T,int& size) //两次保存先序中序序列,所以用指针 { // 两次分别指向str_pre_in,tmp_pre_in pre_in[size++]=T->data+'0'; //size也是形参,通过引用改变相应size1,size2的实际大小 if (T->left) { preorder(T->left,size); } if (T->right) { preorder(T->right,size); } } void inorder(Node *T,int& size) { if (T->left) { inorder(T->left,size); } pre_in[size++]=T->data+'0'; if (T->right) { inorder(T->right,size); } } Node *Insert(Node *T,int x) //插入建立二叉搜索树 { if (T==NULL) { Node*T=(Node*)malloc(sizeof(Node)); T->left=NULL; T->right=NULL; T->data=x; return T; } else if (x<T->data) { T->left=Insert(T->left,x); } else { T->right=Insert(T->right,x); } return T; } int main() { int n; while (scanf("%d",&n)!=EOF&&n!=0) { scanf("%s",str); Node *T=NULL; for (i=0;str[i]!=0;i++) //给定二叉搜索树,建树 { T=Insert(T,str[i]-'0'); } int size1=0; pre_in=str_pre_in; //重定向指针指向str_pre_in preorder(T,size1); inorder(T,size1); str_pre_in[size1]='\0'; //字符串末尾加结束符,才能使用strcmp() while (n--) { int size2=0; pre_in=tmp_pre_in; //tmp_pre_in scanf("%s",tmp); Node *T1=NULL; for (i=0;tmp[i]!=0;i++) //待测试二叉搜索树,建树 { T1=Insert(T1,tmp[i]-'0'); } preorder(T1,size2); inorder(T1,size2); tmp_pre_in[size2]='\0'; if (strcmp(str_pre_in,tmp_pre_in)==0) //比较两次先序中序加起来的序列是否相同 { printf("YES\n"); } else printf("NO\n"); } } return 0; }
相关文章推荐
- 九度1009判断两个序列构成的两个二叉排序树是否相同
- 判断是否相同的二叉搜索树
- PTA习题 5-4 是否同一棵二叉搜索树(二叉搜索树的构建以及相同树的判断)
- 判断两个序列构成二叉搜索树是否相同
- 判断两棵二叉搜索树是否相同
- Is It A Tree?,判断是否是一棵树。(题目来源:九度OJ 1481,2012年北京大学计算机研究生机试真题)
- 【遍历二叉树】08判断两个二叉树是否相同【Same Tree】
- 判断两个数组内容是否相同
- python 判断 图片是否相同
- 九度 oj 题目1009:二叉搜索树
- 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 判断一个 int 向量里是否有相同的数 并且距离在k之内 (2)
- 判断一棵树是否是二叉搜索树
- 第16周 判断是否存在相同数字
- 判断字符串中是否有相同字母
- 题目:JavaScript编程题 页面上输入一个年份(需验证),判断是否是闰年(能被4整除却不能被100整除的年份;能被400整除的是闰年),需在页面上显示提示信息
- ZOJ 1078 题目大意是 :判断 一些数在从二到十六的进制是否是回文数
- 判断序列是否是二叉搜索树的后序遍历序列
- 判断两个数组中是否存在相同的数字
- Interview----判断整数序列是否是二叉搜索树的后序遍历结果