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

 

请实现两棵树是否相等的比较,相等返回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;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值