判断二叉树同构

###题目描述
题目描述
判断两序列是否为同一二叉搜索树序列
输入描述:
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
输出描述:
如果序列相同则输出YES,否则输出NO
示例1
输入

2
567432
543267
576342
0
输出

YES
NO

###代码 & 分析
对于这些二叉树判断是否同构,都可以使用同样的方法,从两棵树的根节点开始,递归左右子树,判断条件很简单,首先判断是否都为空,否的话自然不是同构,然后判断时候一棵为空一棵不为空,都不为空的时候,判断节点的值是否相同,然后递归这个过程即可(突然发现,考研机试对二叉搜索(排序)树也很偏爱啊~):

#include
#include
#include
using namespace std;
typedef struct node{
    char key;
    struct node *left;
    struct node * right;
}Node, *Tree;
int n;
string str;
void ins(Tree &T, char data){
    if(!T){
        T = (Tree)malloc(sizeof(Node));
        T->key = data;
        T->left = NULL;
        T->right = NULL;
    }
    if(data < T->key){
        ins(T->left, data);
    }
    if(data > T->key){
        ins(T->right, data);
    }
}
int comp(Tree t1, Tree t2){
    if(!t1 && !t2)
        return 0;
    if(!t1 || !t2)
        return 1;
    if(t1->key != t2->key)
        return 1;
    return comp(t1->left, t2->left) + comp(t1->right, t2->right);
}
int main(){
  while(cin>>n && n){
     cin>>str;
     Tree t = NULL;
     for(int i=0; i>str;
        for(int i=0; i

你可能感兴趣的:(Exercises)