算法一:
判断两颗树是否相等,如相等则返回0,否则返回其他值。
数据结构如下:
typedef struct TreeNode {
char c;
TreeNode *leftchild;
TreeNode *rightchild;
}
比较函数为:
int Compare(TreeNode * tree1, TreeNode* tree2);
解法分析:
A,B 两颗树相等当且仅当RootA->c == RootB->c, 而且A和B的左右子树对应相等或者左右互换后相等。
具体代码:
int Compare(TreeNode *tree1, TreeNode *tree2)
{
bool isTree1Null = (tree1 == NULL);
bool isTree2Null = (tree2 == NULL);
//其中一个为NULL,而另一个不为NULL,肯定不相等
if (isTree1Null != isTree2Null)
return 1;
//两个都为NULL, 一定相等
if(isTree1Null && isTree2Null)
return 0;
//两个都不为NULL, 如果c不相等,则一定不相等
if (tree1->c != tree2->c)
return 1;
//两个都不为NULL,且c相等,则看两颗子树是否相等或者是否互换相等
return (CompTree(tree1->left, tree2->left) & CompareTree(tree1->right, tree2->right)) |
(CompTree(tree1->left, tree2->right) & CompTree(tree1->right, tree2->left));