检查两个二叉树的算法本质上是同构的吗? 我的代码 -
boolean isIsomorphic(Root t1 , Root t2){
if(t1==null || t2==null){
return false;
}
if((t1.value == t2.value) && (isIsomorphic(t1.left,t2.right) && isIsomorphic(t1.right,t2.left))) {
return true
}
return false;
}
答案 0 :(得分:3)
wikipedia article for 'isomorphism'表示“如果两个对象是同构的,那么由同构保留的任何属性对于其中一个对象都是正确的,对另一个对象也是如此。”
所以你的问题需要说明你是否关心形状,数据,表现等。
如果您关心二叉树的搜索行为,则算法不正确。见What does it mean for two binary trees to be isomorphic?
检查同构的最简单方法是对两棵树进行有序遍历,检查每一步后的值。
另一方面,如果您关心shape 和数据,@ amits修复程序将为您提供。但请注意,您可以将其称为完全匹配。
最后,如果您只关心形状,那么您需要放弃支票t1.value == t2.value
答案 1 :(得分:0)
从here:如果可以通过交换s的某些节点的左右子节点将s转换为t,则两个树s和t是准同构的。节点中的值在确定准同构时并不重要,只有形状很重要。
该链接还提供了这个同构的定义的代码。
如果值很重要,方法可以如下: