java两二叉树相同_java – 最有效的方式来测试两个二叉树的相等性
您將如何在Java中實現二叉樹節點類和二叉樹類以支持最有效(從運行時角度)相等的檢查方法(也必須實現):
boolean equal(Node root1, Node root2) {}
要么
boolean equal(Tree t1, Tree t2) {}
首先,我創建了Node類,如下所示:
public class Node {
private Node left;
private Node right;
private T data;
// standard getters and setters
}
然后使用等于2個根節點作為參數并運行標準遞歸比較的equals方法:
public boolean equals(Node root1, Node root2) {
boolean rootEqual = false;
boolean lEqual = false;
boolean rEqual = false;
if (root1 != null && root2 != null) {
rootEqual = root1.getData().equals(root2.getData());
if (root1.getLeft()!=null && root2.getLeft() != null) {
// compare the left
lEqual = equals(root1.getLeft(), root2.getLeft());
}
else if (root1.getLeft() == null && root2.getLeft() == null) {
lEqual = true;
}
if (root1.getRight() != null && root2.getRight() != null) {
// compare the right
rEqual = equals(root1.getRight(), root2.getRight());
}
else if (root1.getRight() == null && root2.getRight() == null) {
rEqual = true;
}
return (rootEqual && lEqual && rEqual);
}
return false;
}
我的第二個嘗試是使用數組和索引來實現樹的遍歷。然后可以使用兩個數組上的按位操作(AND)進行比較:從2個數組中讀取塊,并使用邏輯AND對其進行掩碼。我沒有讓我的代碼工作,所以我不會在這里發布(我會感謝你的第二個想法的實現以及你的改進)。
任何想法如何最有效地進行二叉樹的平等檢驗?
編輯
這個問題假定結構平等。 (不是語義上的平等)
然而,測試語義相似性的代碼例如“如果它們的內容相同,我們應該考慮兩棵樹是相等的,即使它們的結構不是嗎?”只是按順序迭代樹,它應該是直接的。
總結
以上是生活随笔為你收集整理的java两二叉树相同_java – 最有效的方式来测试两个二叉树的相等性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 打印一棵树_java编程题之从
- 下一篇: java rtmp m3u8_vue常用