[英]Merging Binary Trees in Java
我一直在研究“合並兩個二叉樹”幾個小時,但我不明白為什么我的代碼不起作用。 我得到的樹 t1 為 [1,3,2,5],樹 t2 為 [2,1,3,null,4,null,7],我必須通過對重疊節點求和並避免空值來合並兩棵樹,其中可能,所以結果應該是 [3,4,5,5,4,null,7]。 我沒有像我應該的那樣創建一棵新樹,而是重寫樹 t1 以獲得所需的結果。 我的代碼如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
traversal(t1, t2);
return t1;
}
public void traversal(TreeNode t1, TreeNode t2) {
if(t2 == null) return;
if(t1 == null)
t1 = new TreeNode(0);
t1.val += t2.val;
traversal(t1.left, t2.left);
traversal(t1.right, t2.right);
}
}
我的代碼運行沒有錯誤,我的最終結果是 [3,4,5,5],這顯然是錯誤的。 好像是線
t1 = new TreeNode(0);
不是在做我想讓它做的事情。 我希望它將當前節點從 null 更改為值為 0、一個 null 左節點和一個 null 右節點,以便在下一次迭代中,程序將迭代新創建的 null 左節點。
我嘗試在我的 IDE 中重新創建整個內容(包括類/方法聲明),以便使用它並進行一些調試,因此如果需要,我可以將我的完整代碼編輯到這篇文章中,但我也無法弄清楚如何去做
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
當我希望左邊或右邊(但不是兩者)都為空時,所以我的完整代碼並不像它應該的那樣干凈。 在任何情況下,誰能幫我弄清楚為什么我的代碼對給定的輸入得到錯誤的答案?
我猜你的問題是下面的代碼並沒有真正做到你想要做的。
public void traversal(TreeNode t1, TreeNode t2) {
. . .
if(t1 == null)
t1 = new TreeNode(0);
. . .
在這里,您將引用的本地副本更改為指向新對象。 您不會更改原始對象。 實際上,您不能使用與最初創建對象的原始方法不同的方法來執行此操作。 請參閱java 按值傳遞。
所以基本上你創建一個新的TreeNode
,它沒有連接到父節點。 您必須手動執行此操作,同時還要跟蹤父節點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.