java两二叉树相同_java – 最有效的方式来测试两个二叉树的相等性
您將如何在Java中實(shí)現(xiàn)二叉樹節(jié)點(diǎn)類和二叉樹類以支持最有效(從運(yùn)行時(shí)角度)相等的檢查方法(也必須實(shí)現(xiàn)):
boolean equal(Node root1, Node root2) {}
要么
boolean equal(Tree t1, Tree t2) {}
首先,我創(chuàng)建了Node類,如下所示:
public class Node {
private Node left;
private Node right;
private T data;
// standard getters and setters
}
然后使用等于2個(gè)根節(jié)點(diǎn)作為參數(shù)并運(yùn)行標(biāo)準(zhǔn)遞歸比較的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;
}
我的第二個(gè)嘗試是使用數(shù)組和索引來(lái)實(shí)現(xiàn)樹的遍歷。然后可以使用兩個(gè)數(shù)組上的按位操作(AND)進(jìn)行比較:從2個(gè)數(shù)組中讀取塊,并使用邏輯AND對(duì)其進(jìn)行掩碼。我沒(méi)有讓我的代碼工作,所以我不會(huì)在這里發(fā)布(我會(huì)感謝你的第二個(gè)想法的實(shí)現(xiàn)以及你的改進(jìn))。
任何想法如何最有效地進(jìn)行二叉樹的平等檢驗(yàn)?
編輯
這個(gè)問(wèn)題假定結(jié)構(gòu)平等。 (不是語(yǔ)義上的平等)
然而,測(cè)試語(yǔ)義相似性的代碼例如“如果它們的內(nèi)容相同,我們應(yīng)該考慮兩棵樹是相等的,即使它們的結(jié)構(gòu)不是嗎?”只是按順序迭代樹,它應(yīng)該是直接的。
總結(jié)
以上是生活随笔為你收集整理的java两二叉树相同_java – 最有效的方式来测试两个二叉树的相等性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 打印一棵树_java编程题之从
- 下一篇: java rtmp m3u8_vue常用