http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2482&cid=1184
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
示例输入
2 123456789 987654321 432156789 0
示例输出
NO NO
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 //int mark=1; 5 typedef struct node 6 { 7 char data; 8 struct node *lchild,*rchild; 9 } BiTreeNode,*BiTree; 10 char sh[51],sh1[51],sh2[51]; 11 char ch[51]; 12 int count=0; 13 int BSTinsert(BiTree *T,char x);//建立排序二叉树,也就是所谓的插入操作。 14 void InOrderTraverse(BiTree T);//二叉树的先序遍历,不知道为什么用中序会错误 15 int judge(char a[],char b[]); 16 int main() 17 { 18 int len; 19 int n; 20 while(scanf("%d",&n)&&n) 21 { 22 count=0;//我错了5遍,都是因为没有在这里再归0一遍,因为是多组输入,所以这里必须有这句话,要不然以后的会覆盖 23 BiTree T=NULL,T1; 24 scanf("%s",ch); 25 int len1 = strlen(ch); 26 for(int i=0;i<=len1-1;i++) 27 { 28 BSTinsert(&T,ch[i]); 29 } 30 InOrderTraverse(T); 31 sh1[count]='