演算法 LeetCode 617 合併二叉樹

2021-10-13 22:38:54 字數 1388 閱讀 4033

原題鏈結

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

你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點

。示例 1:

輸入:tree 1 tree 2

1 2/ \ / \

3 2 1 3

/ \ \

5 4 7

輸出:合併後的樹:3/

4 5/ \ \

5 4 7

注意: 合併必須從兩個樹的根節點開始。

related topics 樹

? 595 ? 0

遞迴終止條件: t1 與 t1 都為空

合併根節點, 合併左子樹,合併右子樹

把函式看成合併子樹

class

solution

if(t2 == null)

treenode merged =

newtreenode

(t1.val + t2.val)

; merged.left =

mergetrees

(t1.left, t2.left)

; merged.right =

mergetrees

(t1.right, t2.right)

;return merged;

}}

利用類層序遍歷比較兩棵樹, 合併後的樹儲存在 t1 中

這裡注意: 要先判斷都不為空的情況, 若符合條件, 先將其加入佇列, 如果放在後面判斷, 由於出現了對 p1 賦值的1情況, 所以可能會導致原本不符合條件又變得符合條件了

class

solution

if(t2 == null)

queue

queue =

newlinkedlist

<

>()

; queue.

add(t1)

; queue.

add(t2)

;while

(!queue.

isempty()

)if(p1.right != null && p2.right != null)

if(p1.left == null && p2.left != null)

if(p1.right == null && p2.right != null)

}return t1;

}}

參考題解

LeetCode617 合併二叉樹

給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree 2 1 2 3 2...

LeetCode 617 合併二叉樹

題目 給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree 2 1 2 ...

leetcode 617 合併二叉樹

這個題目不難,能夠想到使用遞迴的方法去解決,最好的方法不是新建一棵樹,而是把所有的改變都放在一棵樹上。此處我將合併後的改變都放在了樹t1上了。兩棵樹同時開始並按照相同的方式遍歷,當兩個根節點都不為null時,就將兩個根節點的值加到樹t1上,然後遞迴合併兩個根節點的左子樹和右子樹。合併完後可能會出現有...