2011-03-21 47 views
1

只是另一個小問題。我還必須爲我的IntTree類創建一個equals方法,它循環兩棵樹並比較節點。如果樹中的所有值都相等,則返回true,否則返回false。這裏是我到目前爲止的代碼:等於方法來比較兩棵樹的

private boolean equals(IntTreeNode node1, IntTreeNode node2){ 
    if ((node1 != null) || (node2 != null)){ 
     if (node1.equals(node2)){ 
      equals(node1.left, node2.left); 
      equals(node1.right, node2.right); 
      return node1.equals(node2); 
     } 
    } 
    return false; 
} 

當我呼籲我的驅動程序這個方法來比較兩個樹的那個是完全一樣的(blah1.equals(blah2)),我得到錯誤的。然而,當我打電話給blah1.equals(blah1)時,我得到了真... 我不確定我的退貨聲明是否正確

+0

你叫等於不處理怎麼樣等於返回值 – user489041 2011-03-21 20:52:16

+0

「IntTreeNode」的方法? – 2011-03-21 21:22:21

回答

4

爲什麼你做兩個等於未處理結果?

我會通過只是

return equals(node1.left, node2.left) && equals(node1.right, node2.right); 
+0

此外,當node1 == null && node2 == null時,您應該返回true – SJuan76 2011-03-21 20:54:40

+0

我仍然得到相同的結果。當我在同一棵樹上調用這個方法時,它仍然給我錯誤。 – Shane 2011-03-21 21:06:35

+0

您是否檢查過節點的equals()方法?你創建了兩個應該相等的節點並檢查node1.equals(node2)嗎? – SJuan76 2011-03-21 22:26:09

2

我要大膽地猜測,你有沒有覆蓋的IntTreeNode equals方法,或者沒有正確地做了改變內如果。

我會做這樣的事情:

public boolean equals(Node other) { 
    if (other == null) return false; 

    boolean valuesEqual = this.value == other.value; 
    boolean leftEquals = this.left == null ? other.left == null : this.left.equals(other.left); 
    boolean rightEquals = this.right == null ? other.right == null : this.right.equals(other.right); 

    return valuesEqual && leftEquals && rightEquals; 
} 

然後到兩棵樹比較,你可以叫rootNode.equals(otherRootNode)

+1

啊,我給的IntTreeNode類沒有這個。把它放進去,它就像一個魅力!我嘗試了使用equals()方法來比較每個對象中的數據,然後將左右節點與大量的if/else塊進行比較。非常感謝! – Shane 2011-03-22 05:27:09

0
private boolean equals(IntTreeNode node1, IntTreeNode node2) { 
    if (node1 == node2) { 
     return true; 
    } 

    if (node1 == null || !node1.equals(node2)) { 
     return false; 
    } 

    return equals(node1.left, node2.left) && equals(node1.right, node2.right); 
}