数据结构为:
typedef struct_TreeNode{ char c; TreeNode *leftchild; TreeNode *rightchild; }TreeNode;函数接口为:int CompTree(TreeNode* tree1,TreeNode* tree2);
注:A、B两棵树相等当且仅当Root->c==RootB-->c,而且A和B的左右子树相等或者左右互换相等。
int compTree(TreeNode *tree1, TreeNode *tree2)
{
if(!tree1 && !tree2) return 1;
if((tree1 && !tree2) ||(!tree1 && tree2)) return 0;
if(tree1 && tree2)
{
if(tree1->c==tree2->c)
{
if(compTree(tree1->leftChild, tree2->leftChild))
return compTree(tree1->rightChild, tree2->rightChild);
else if(compTree(tree1->rightChild, tree2->leftChild))
return compTree(tree1->leftChild, tree2->rightChild);
}
}
return 0; } 时间复杂度:从代码中可以看出,需要对两棵树都进行遍历,因此时间复杂度是O(N) 空间复杂度:应该是常数级别
bool _stdcall test(bt *t1,bt *t2) { bool isEmpty1 = (t1 == NULL); bool isEmpyt2 = (t2 == NULL); if( isEmpyt1 == isEmpty2) { return true; } if( isEmpty1 || isEmpty2) { return false; } if(t1->data != t2->data) { return false } return (test(t1->left,t2->right) && test(t1->right,t2->left)) || (test(t1->left,t2->left) && test(t1->right,t2->right)); }
int CompTree(TreeNode* tree1,TreeNode* tree2) { if(tree1 == NULL && tree2 == NULL) return 1; if(tree1 != NULL && tree2 != NULL) { if(tree1->c == tree2->c) { if(CompTree(tree1->leftchild, tree2->leftchild) && CompTree(tree1->rightchild, tree2->rightchild) || (CompTree(tree1->rightchild, tree2->leftchild) && CompTree(tree1->leftchild,tree2->rightchild)) return 1; } } return 0; }