//递归算法
#include<iostream>
using namespace std;
typedef struct BiTreeNode
{
int data;
BiTreeNode* lchild;
BiTreeNode* rchild;
BiTreeNode(int x) : data(x), lchild(NULL), rchild(NULL) {}
};
bool IsEqual(BiTreeNode *node1,BiTreeNode *node2)
{
if(node1 == NULL && node2 == NULL)//两棵二叉树都为空树
{
cout<<"两棵树相等"<<endl;
return 1;
}
if(!node1 || !node2)//两棵树都不存在
{
cout<<"两棵树不相等"<<endl;
return 0;
}
if(node1->data == node2->data)
return (IsEqual(node1->lchild,node2->lchild) && IsEqual(node1->rchild,node2->rchild))
|| (IsEqual(node1->lchild,node2->rchild) && IsEqual(node1->rchild,node2->lchild));
}
//***********测试代码************
// 1 1
// / \ / \
// 2 3 2 3
// /\ \
// 4 5 5
void main()
{
//生成第一棵树
BiTreeNode* Node1 = new BiTreeNode(1);//生成节点
BiTreeNode* Node2 = new BiTreeNode(2);
BiTreeNode* Node3 = new BiTreeNode(3);
BiTreeNode* Node4 = new BiTreeNode(4);
BiTreeNode* Node5 = new BiTreeNode(5);
BiTreeNode* Node6 = new BiTreeNode(6);
BiTreeNode* Node7 = new BiTreeNode(7);
Node1->lchild=Node2;//连接节点
Node1->rchild=Node3;
Node2->lchild=Node4;
Node2->rchild=Node5;
//生成第二棵树
BiTreeNode* Node11 = new BiTreeNode(1);//生成节点
BiTreeNode* Node12 = new BiTreeNode(2);
BiTreeNode* Node13 = new BiTreeNode(3);
BiTreeNode* Node15 = new BiTreeNode(5);
BiTreeNode* Node16 = new BiTreeNode(6);
BiTreeNode* Node17 = new BiTreeNode(7);
Node11->lchild=Node12;//连接节点
Node11->rchild=Node13;
Node12->rchild=Node15;
IsEqual(Node1,Node11);
}
比较两棵旋转的二叉树是否相等
最新推荐文章于 2020-09-23 18:41:32 发布