问题描述:
请实现两棵树是否相等的比较,相等返回1,否则返回其他值,并说明算法复杂度。
数据结构为:
typedef struct TreeNode{
char c;
TreeNode *leftchild;
TreeNode *rightchild;
}TreeNode;
函数接口为:int CompTree(TreeNode* tree1,TreeNode* tree2);
提示:A、B两棵树相等当且仅当RootA->c==RootB–>c,而且A和B的左右子树相等或者左右互换相等。
问题求解:
int compTree(TreeNode *tree1, TreeNode *tree2)
{
if(tree1==NULL && tree2==NULL) return 1;
if((tree1 != NULL && tree2 == NULL) ||(tree1 == NULL && tree2 != NULL))
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)
空间复杂度:应该是常数级别