二叉搜索树是否相同
2016-08-15 19:00
459 查看
二叉排序树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
输出
示例输入
2
123456789
987654321
432156789
0
示例输出
NO
NO
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
输出
示例输入
2
123456789
987654321
432156789
0
示例输出
NO
NO
# include <stdio.h> # include <stdlib.h> # include <string.h> typedef struct node { char data; struct node*l,*r; } Node; Node* BST(Node*root,int key);//创建二叉搜索树 void level_traverse(Node*p,char s[]);//层次访问 int main() { int n; int j; char str1[11]; char str2[11]; Node*root1,*root2; while((scanf("%d",&n))!=EOF) { if(n==0) { break; } scanf("%s",str1); root1 = NULL; for(j=0;j<strlen(str1);j++) { root1 = BST(root1,str1[j]); } level_traverse(root1,str1); while(n--) { scanf("%s",str2); root2 = NULL; for(j=0;j<strlen(str2);j++) { root2 = BST(root2,str2[j]); } level_traverse(root2,str2); if(strcmp(str1,str2) == 0) printf("YES\n"); else printf("NO\n"); } } return 0; } Node* BST(Node *root,int key) { if(root == NULL)//树空直接插入该节点 { root = (Node*)malloc(sizeof(Node)); root->data = key; root->l = NULL; root->r = NULL; return root; } else //找到应该插入的位置 { if(root->data > key) { root->l = BST(root->l,key); } else { root->r = BST(root->r,key); } } return root; } void level_traverse(Node*p,char s[]) { int i,front,rear; Node*queue[20]; Node*q; if(p) { front = rear = 0; i = 0; queue[rear++] = p; while(front < rear) { q = queue[front++]; s[i++] = q->data; if(q->l) { queue[rear++] = q->l; } if(q->r) { queue[rear++] = q->r; } } } }
相关文章推荐
- 判别两序列所对应两颗二叉搜索树是否相同之建立两颗树4.13
- 判别两序列所对应两颗二叉搜索树是否相同之建立一颗树4.134
- 判断两个序列构成二叉搜索树是否相同
- 判断是否相同的二叉搜索树
- HDU 3791 比较两棵二叉搜索树是否相同(建树,比较)
- PTA习题 5-4 是否同一棵二叉搜索树(二叉搜索树的构建以及相同树的判断)
- 九度题目36:二叉搜索树(判断是否是相同二叉搜索树)
- 判断两棵二叉搜索树是否相同
- 判断两个数组的元素是否相同,把相同的去掉
- 翻转字符串和比较两个字符串是否相同
- 5-4 是否同一棵二叉搜索树 (25分)
- 04-树4 是否同一棵二叉搜索树 (25分)
- 一个数组保存了N个结构,每个结构保存了一个坐标,结构间的坐标都不相同,请问如何找到指定坐标的结构(除了遍历整个数组,是否有更好的办法)?
- 蓝桥杯寒假训练二1004 For循环的注意点以及关于double 类型的数是否相同
- 判断两个字符串是否由相同的字符组成
- 判断二个文件是否相同
- 第16周 判断是否存在相同数字
- JavaScript如何比较两个数组的内容是否相同【转】
- C#.NET常见问题(FAQ)-如何判断两个类是否相同类型
- 数组比较是否相同