#include<iostream>
using namespace std;
typedef struct TreeNode{
char data;
struct TreeNode *left;
struct TreeNode *right;
} node;
node *createTreePreOrder()
{
char ch;
node *root = NULL;
fflush(stdin);
ch = getchar();
if(ch == ' ')
{
root = NULL;
}
else
{
root = (node *)malloc(sizeof(node));
root->data = ch;
printf("\n请输入节点%c的左子结点:",root->data);
root->left = createTreePreOrder();
printf("\n请输入节点%c的右子结点:",root->data);
root->right = createTreePreOrder();
}
return root;
}
int compTree(node *tree1, node *tree2)
{
bool tree1IsNULL = (tree1 == NULL);
bool tree2IsNULL = (tree2 == NULL);
if(tree1IsNULL != tree2IsNULL)//树一和树二当前节点有一个为空,不相等
{
return 1;
}
if(tree1IsNULL && tree2IsNULL)//树一和树二当前节点都为空,相等
{
return 0;
}
if(tree1->data != tree2->data)//树一和树二当前节点都不为空且不等,不相等
{
return 1;
}
//树一和树二当前节点都不为空且相等,验证左右子节点,当树一和树二左右子节点对应相等或者交换后相等,则相等
return (compTree(tree1->left, tree2->left) || compTree(tree1->right, tree2->right))
&& (compTree(tree1->left, tree2->right) || compTree(tree1->right, tree2->left));
}
int main()
{
node *root1, *root2;
cout << "请输入根节点1:";
root1 = createTreePreOrder();
cout << "请输入根节点2:";
root2 = createTreePreOrder();
if(compTree(root1, root2))
cout << "The two tree isn't equal!" << endl;
else
cout << "The two tree is equal!" << endl;
return 0;
}
编程比较两棵二叉树是否相等
最新推荐文章于 2024-03-12 19:49:22 发布