您的位置:首页 > 职场人生

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

2012-03-09 23:23 134 查看
请实现两棵树是否相等的比较,相等返回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;
else
cout<<"different"<<endl;

int i;cin>>i;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: