給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。
你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。
示例 1:
思路參考:
我們可以對這兩棵樹同時進行前序遍歷,並將對應的節點進行合併。在遍歷時,如果兩棵樹的當前節點均不為空,我們就將它們的值進行相加,並對它們的左孩子和右孩子進行遞迴合併;如果其中有一棵樹為空,那麼我們返回另一顆樹作為結果;如果兩棵樹均為空,此時返回任意一棵樹均可(因為都是空)。
1leetcode 執行用時:1 ms > 71.85%, 記憶體消耗:39.2 mb > 26.78%/**2
* definition for a binary tree node.
3* public class treenode
8* }9*/
10class
solution
28 }
時間複雜度:o(n),其中 n 是兩棵樹中節點個數的較小值。
空間複雜度:o(n),在最壞情況下,會遞迴 n 層,需要 o(n) 的棧空間。
思路二:非遞迴 + 廣度優先遍歷
借用三個佇列,分別用來儲存新的二叉樹結點,t1的結點,t2樹的結點。每次都從三個佇列中取結點,存放新樹的佇列取乙個結點,其他兩個佇列取兩個結點。然後把結點合併後把每個結點的左右子樹都順序入隊。
力扣617 合併二叉樹
給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 思路參考 我們可以對這兩棵樹同時進行前序遍歷,並...
力扣c語言實現 617 合併二叉樹
給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree 2 1 2 3 2...
617 合併二叉樹
給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree 2 1 2 3 2...