equals()方法是否适用于这个二叉树?

时间:2012-01-10 16:13:05

标签: java

我写了一个检查两个二叉树是否相等的方法。

这是正确的还是有更好的方法?

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;
}  

4 个答案:

答案 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;
}

此代码应该有效。您正在检查node1node2是否为空,然后返回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的角落情况