如何判断两个树相等?

天下第一好大人 2010-08-07 07:39:00
树是普通的树,并且不考虑子树顺序?
...全文
92 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
FancyMouse 2010-08-08
最小表示一下不就线性了么
回复
绿色夹克衫 2010-08-07
应该可以的,先对2棵树分别作处理,类似于排序吧,递归一下,按照子节点的数量或其他什么特征值,在每一级排一下,两棵树都处理完毕了,直接递归去比应该就可以。

[Quote=引用 4 楼 gogdizzy 的回复:]

引用 3 楼 litaoye 的回复:
相等的概念是什么?同构?还是每个节点的值都一样?......


假如是同构,有什么好的方法吗?
[/Quote]
回复
[Quote=引用 3 楼 litaoye 的回复:]
相等的概念是什么?同构?还是每个节点的值都一样?......
[/Quote]

假如是同构,有什么好的方法吗?
回复
绿色夹克衫 2010-08-07
相等的概念是什么?同构?还是每个节点的值都一样?......
回复
toplinq 2010-08-07
是NP问题,给个递归的伪代码参考一下,没测试过,不一定对,仅仅供参考,不考虑树枝顺序简单些

bool TreeCompare(Tree lhs, Tree rhs)
{
if ((lhs == rhs) //地址一样或两者都为NULL时候,返回1,做终结条件
{
return true;
}
else if ((lhs != NULL) && (rhs != NULL))
{
if(lhs->data != rhs->data || lhs->size() !=rhs->size()) //树枝个数不同或data不同
return false;
bool flag=true;
for(int i=0;i<lhs->size();i++) //遍历递归
{
flag &=TreeCompare(lhs->branch[i],hls->branch[i]);
if(!flag) return false; //有不同的趁早退出
}
return true; //全相同
}
else
{
return false; //一个为NULL一个非NULL
}
}
回复
michael122 2010-08-07
凭感觉像是NP问题
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告