判断两棵二叉树是否为同一棵树,需要比较两个方面:
一:结构是否相同;
二:每个节点上的元素是否相同;
当二者都满足的时候才可判定二者为同一棵二叉树。
结构相同包括节点的个数以及每个节点上的子树相同。
下面是代码实现。
#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; //其他情况,二者不同
}
```
“`