我写了一个检查两个二叉树是否相等的方法。
这是正确的还是有更好的方法?
public boolean equal(BinaryNode t1, BinaryNode t2){
if(t1==null || t2==null)
return false;
else if(t1.element != t2.element)
return false;
else if(equal(t1.left,t2.left))
return false;
else if(equal(t1.right,t2.right))
return false;
else
return true;
}
答案 0 :(得分:2)
不要问我们 - 将unit tests写入证明是正确的。
请务必包含所有类型的案例 - 我认为至少有一个错误,因为equals(null, null)
将返回false
。
答案 1 :(得分:2)
以下内容可能更接近您正在寻找的逻辑,但完全未经测试,并且已在此文本字段中编写:
if (t1==null && t2==null)
return true;
if (t1.element != t2.element)
return false;
return equal(t1.left, t2.left) && equal(t1.right, t2.right);
您当前的版本存在很多缺陷。
答案 2 :(得分:1)
public boolean binaryTreeEquals(BinaryNode node1, BinaryNode node2)
{
if(node1 == node2 == null)
return true;
if(node1.element == node2.element &&
binaryTreeEquals(node1.left, node1.right) &&
binaryTreeEquals(node2.left, node2.right)
return true;
else
return false;
}
此代码应该有效。您正在检查node1
或node2
是否为空,然后返回false,但如果它们两者相等则为
答案 3 :(得分:0)
public boolean equals(BinaryNode root1, BinaryNode root2) {
if (root1 == null || root2 == null) {
return root1 == null && root2 == null;
} else {
return root1.data == root2.data
&& equals2(root1.left, root2.left)
&& equals2(root1.right, root2.right);
}
}
上述两种解决方案都不包括一个根为null
而另一个根为Not null
的角落情况