我正在學習Go,在本教程中,并發和通道可用于完成此練習:解決方案。
我嘗試通過Java. 我能想到的解決辦法是用臨時資料結構來存盤這兩棵樹的中序遍歷的結果,然后進行比較。
例如,我使用 aStringBuilder來存盤中序遍歷的結果,然后進行比較(注意我們正在比較已排序的二叉樹):
public boolean equivalentBST(TreeNode p, TreeNode q) {
StringBuilder pSb = new StringBuilder();
walk(pSb, p);
StringBuilder qSb = new StringBuilder();
walk(qSb, q);
return pSb.compareTo(qSb) == 0;
}
private void walk(StringBuilder sb, TreeNode node) {
if (node == null) {
return;
}
walk(sb, node.left);
sb.append(node.val);
walk(sb, node.right);
}
測驗用例:
TreeNode p = new TreeNode(9);
TreeNode p2 = new TreeNode(8);
TreeNode p3 = new TreeNode(7);
p.left = p2;
p2.left = p3;
TreeNode q = new TreeNode(9);
TreeNode q2 = new TreeNode(8);
TreeNode q3 = new TreeNode(7);
q3.right = q2;
q.left = q3;
System.out.println(equivalentBST(q, p)); // output true
我想知道有沒有其他更好的方法來解決這個問題Java?
uj5u.com熱心網友回復:
您可以同時遍歷兩棵樹并立即比較它們的元素,而無需使用StringBuilder.
沿線的東西:
public boolean equivalentBST(TreeNode node1, TreeNode node2) {
var stack1 = new ArrayList<TreeNode>();
var stack2 = new ArrayList<TreeNode>();
while (true) {
while (node1 != null) {
stack1.add(node1);
node1 = node1.left;
}
while (node2 != null) {
stack2.add(node2);
node2 = node2.left;
}
if (stack1.isEmpty() || stack2.isEmpty())
return stack1.isEmpty() && stack2.isEmpty();
node1 = stack1.remove(stack1.size() - 1);
node2 = stack2.remove(stack2.size() - 1);
if (node1.val != node2.val)
return false;
node1 = node1.right;
node2 = node2.right;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400694.html
