百度面试题:判断两棵树是否相等

来源:互联网 发布:爱信诺税控开票软件 编辑:程序博客网 时间:2024/05/22 08:22
 

请实现两棵树是否相等的比较,相等返回1,否则返回其他值,并说明算法复杂度。

数据结构为:
typedef struct_TreeNode{
char c;
TreeNode *leftchild;
TreeNode *rightchild;
}TreeNode;
函数接口为:int CompTree(TreeNode* tree1,TreeNode* tree2);
注:A、B两棵树相等当且仅当Root->c==RootB-->c,而且A和B的左右子树相等或者左右互换相等。

参考了此网址的内容

http://hi.baidu.com/mianshiti/blog/item/1070b78ce2ece2f1513d92e7.html

 

 

#include<iostream>using namespace std;typedef struct _TreeNode{char c;_TreeNode *leftchild;_TreeNode *rightchild;}TreeNode;int CompTree(TreeNode* tree1,TreeNode* tree2){if(tree1==NULL&&tree2==NULL)return 1;if(tree1==NULL||tree2==NULL)return 0;if(tree1->c!=tree2->c)return 0;return ((CompTree(tree1->leftchild,tree2->leftchild)&&CompTree(tree1->rightchild,tree2->rightchild))||(CompTree(tree1->leftchild,tree2->rightchild)&&CompTree(tree1->rightchild,tree2->leftchild)));}int main(){TreeNode t1,t2,t3,t4,t5;t1.c='f';t2.c='a';t3.c='v';t4.c='o';t5.c='r';t1.leftchild=&t2;t1.rightchild=&t3;t2.leftchild=NULL;t2.rightchild=&t4;t3.leftchild=&t5;t3.rightchild=NULL;t4.rightchild=NULL;t4.leftchild=NULL;t5.rightchild=NULL;t5.leftchild=NULL;TreeNode n1,n2,n3,n4,n5;n1.c='f';n2.c='a';n3.c='v';n4.c='o';n5.c='r';n1.leftchild=&n3;n1.rightchild=&n2;n2.leftchild=NULL;n2.rightchild=&n4;n3.leftchild=&n5;n3.rightchild=NULL;n4.rightchild=NULL;n4.leftchild=NULL;n5.rightchild=NULL;n5.leftchild=NULL;if(CompTree(&t1,&n1))cout<<"equal"<<endl;elsecout<<"different"<<endl;int i;cin>>i;return 0;}