题目描述:
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
如果序列相同则输出YES,否则输出NO
由于数据量比较的小,所以可以采用空间换取时间的方法,我们这里并没有构建二叉树,而是使用数组存储输入的value。
如果父节点的数组索引是index。那么它的左孩子的数组索引就是2*index + 1。右孩子的数组索引为2*index。当然也可以反过来。
代码实现如下:
1 #include <iostream> 2 #define MAX 1024 3 using namespace std; 4 5 //strinput用来接收输入的字符串。sourceTree是其他的和它比较的树。generTree是待比较的输入树。这里树使用数组存储。 6 char sourceTree[MAX] , generTree[MAX], strinput[10]; 7 8 bool insertNode(char tree[], char c) 9 { 10 int index = 1;//从下标为1开始构建 11 bool mark = true; 12 13 while (1) 14 { 15 if (tree[index] == '