判断两个二叉树是否相同(c++递归实现)

来源:互联网 发布:c 串口通信编程 编辑:程序博客网 时间:2024/04/26 12:17

判断两棵二叉树是否为同一棵树,需要比较两个方面:
一:结构是否相同;
二:每个节点上的元素是否相同;
当二者都满足的时候才可判定二者为同一棵二叉树。
结构相同包括节点的个数以及每个节点上的子树相同。
下面是代码实现。

#include<iostream>using namespace std;typedef struct Node* TNode;struct Node{    int data;    TNode left;    TNode right;};void Print(TNode T);TNode BuildTree(TNode T, int N);  //建立二叉树TNode Insert(TNode T,int i);    //在树中插入一个元素bool Compare(TNode T1, TNode T2);  //比较两个二叉树是不是同一棵树int main(){   int N, L;   TNode T;   cin >> N;  while(N != 0){   cin >> L;   T = BuildTree(T, N);   while(L--){    TNode T1;    T1 = BuildTree(T1, N);    if(Compare(T, T1))        cout << "Yes" << endl;    else        cout << "No" << endl;   }   cin >> N;   }   return 0;}TNode BuildTree(TNode T, int N){    TNode p, s;    int i;    cin >> i;    T = new Node();    T->data = i;    T->left = NULL;    T->right = NULL;    while(--N){        cin >> i;        T = Insert(T, i);    }    return T;}TNode Insert(TNode T,int i){    if(T){        if(i > T->data)            T->right = Insert(T->right, i);        else if(i < T->data)            T->left = Insert(T->left, i);    }    else{        T = new Node();        T->data = i;        T->left = NULL;        T->right = NULL;    }    return T;}bool Compare(TNode T1, TNode T2){    if(T1 && T2 && (T1->data==T2->data)){         if(Compare(T1->left, T2->left) && Compare(T1->right, T2->right)) //若根节点相同,递归判断节点的左右子树是否相同            return true;         else            return false;    }    else if(T1==NULL && T2==NULL)  //如果都是空树,二者相同        return true;    else        return false;     //其他情况,二者不同}
```

“`

原创粉丝点击