如何判断两个树相等?

天下第一好大人 2010-08-07 07:39:00
树是普通的树,并且不考虑子树顺序?
...全文
181 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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问题

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧