- 题目要求:请实现两棵二叉树树是否相等的比较,并说明算法复杂度。
定义数据结构:
struct BinaryTreeNode
{
int value;
BinaryTreeNode* left;
BinaryTreeNode* right;
};
解题思路:
A、B两棵树相等当且仅当pRoot1->value==pRoot2–>value,而且pRoot1和pRoot2的左右子树相等或者左右互换相等。
实现代码:
bool CompareTree(BinaryTreeNode *pRoot1,BinaryTreeNode *pRoot2)
{
if (pRoot1 == NULL && pRoot2 == NULL)
{
return true;
}
if (pRoot1 != NULL && pRoot2 != NULL)
{
if (pRoot1->value == pRoot2->value)
{
//注意pRoot1和pRoot2左右子树相等或者左右互换相等的情况
if (CompareTree(pRoot1->left,pRoot2->left) && CompareTree(pRoot1->right,pRoot2->right)
|| CompareTree(pRoot1->right,pRoot2->left) && CompareTree(pRoot1->left,pRoot2->right))
{
return true;
}
}
}
return false;
}
注意递归结束的判断。