力扣617 合併二叉樹

2021-10-19 07:25:05 字數 843 閱讀 9725

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

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

思路參考: 

我們可以對這兩棵樹同時進行前序遍歷,並將對應的節點進行合併。在遍歷時,如果兩棵樹的當前節點均不為空,我們就將它們的值進行相加,並對它們的左孩子和右孩子進行遞迴合併;如果其中有一棵樹為空,那麼我們返回另一顆樹作為結果;如果兩棵樹均為空,此時返回任意一棵樹均可(因為都是空)。

1 /**

2 * definition for a binary tree node.

3 * public class treenode

8 * }

9 */

10 class solution

28 }

leetcode 執行用時:1 ms > 71.85%, 記憶體消耗:39.2 mb > 26.78%

時間複雜度: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...