二叉排序树
来源:互联网 发布:java else 编辑:程序博客网 时间:2024/05/23 23:30
Problem Description
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
Input
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
Output
Example Input
21234567899876543214321567890
Example Output
NONO
/*思路是,输入第一个序列,按照此序列建二叉排序树存储按照这个序列建树的先序序列。输入要判断的序列,建树,存储先序序列。进行字符串的比较。*/#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;typedef struct tree{ char data; tree *lc, *rc;} BiTree;void Add(BiTree *T, char x) //在二叉排序树中插入节点{ BiTree *p; if(T->data > x) //x小于T->data则放在T左边 { if(T->lc == NULL) //判断T的左子树是否存在,不存在直接插入。存在进行递归 { p = (BiTree*)malloc(sizeof(BiTree)); p->data = x; p->lc = p->rc = NULL; T->lc = p; } else Add(T->lc, x); } else { if(T->rc == NULL) { p = (BiTree*)malloc(sizeof(BiTree)); p->data = x; p->lc = p->rc = NULL; T->rc = p; } else Add(T->rc, x); }}BiTree *Creat(char s[]) //建立二叉排序树{ int n, i; n = strlen(s); BiTree *head; head = (BiTree*)malloc(sizeof(BiTree)); head->data = s[0]; head->lc = head->rc = NULL; for(i = 1; i < n; i++) Add(head, s[i]); return head;}char a[20], b[20]; //输入的序列和要判断的序列char s1[20], s2[20]; //两个字符串用来存储先序序列int i;void Save1(BiTree *T){ if(T) { s1[i++] = T->data; Save1(T->lc); Save1(T->rc); }}void Save2(BiTree *T){ if(T) { s2[i++] = T->data; Save2(T->lc); Save2(T->rc); }}int main(){ int n; BiTree *T; while(cin >> n && n != 0) { cin >> a; T = Creat(a); i = 0; Save1(T); s1[i] = '\0'; while(n--) { cin >> b; T = Creat(b); i = 0; Save2(T); s2[i] = '\0'; if(strcmp(s1, s2) == 0) cout << "YES" << endl; else cout << "NO" << endl; } } return 0;}
阅读全文
0 0
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 一个完整的ajax请求
- 二次封装OKHttp网络框架(1)
- 菜鸟学概率统计——最大似然估计(MLE)
- jQuery学习和知识点总结归纳
- C++ 拓扑排序算法
- 二叉排序树
- react-native 仿京东加入购物车动画效果
- 数据结构实验之排序六:希尔排序
- samba服务器简介以及常用命令
- NYOJ 325 zb的生日(01背包)
- 线程并发和并行的区别以及记忆方法
- camel+activemq入门整合
- core dump[打开及调试]
- Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project...