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

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

#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;     //其他情况,二者不同
}
```

“`

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值