617 合併二叉樹

2021-10-24 19:40:16 字數 1466 閱讀 5831

給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。

你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 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...