給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。
你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。
示例 1:
輸入:
tree 1 tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
輸出:
合併後的樹:
3/ \
4 5
/ \ \
5 4 7
注意: 合併必須從兩個樹的根節點開始。
解法一:
dfs,遞迴,出口 t1,或者 t2 為null, 或者,節點新建好,返回
//dfs
public treenode mergetrees(treenode t1, treenode t2)
if(t2 == null)
treenode temp = new treenode(t1.val+t2.val);
temp.left = mergetrees(t1.left,t2.left);
temp.right = mergetrees(t1.right,t2.right);
return temp;
}
解法二:
迭代,使用三個佇列,
queue,彈入 新節點(相加的)
queue1,彈入 root1
queue2, 彈入 root2
//迭代
public treenode mergetrees(treenode t1, treenode t2)
if(t2 == null)
treenode merged = new treenode(t1.val+t2.val);
queuequeue = new linkedlist<>();
queuequeue1 = new linkedlist<>();
queuequeue2 = new linkedlist<>();
queue.offer(merged);
queue1.offer(t1);
queue2.offer(t2);
while(!queue1.isempty() && !queue2.isempty())else if(left1 != null)else if(left2 != null)
}if(right1 != null || right2 != null)else if(right1 != null)else if(right2 != null)}}
return merged;
}
617 合併二叉樹
給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree 2 1 2 3 2...
617 合併二叉樹
題目描述 給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 輸出 合併後的樹 注意 合併必須...
617 合併二叉樹
617.合併二叉樹 給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree...