@author: sdubrz
@date: 2020.04.14
題目難度: 簡單
考察內容: 樹
原題鏈接 https://leetcode-cn.com/problems/merge-two-binary-trees/
題目的著作權歸領釦網絡所有,商業轉載請聯繫官方授權,非商業轉載請註明出處。
解題代碼轉載請聯繫 lwyz521604#163.com
給定兩個二叉樹,想象當你將它們中的一個覆蓋到另一個上時,兩個二叉樹的一些節點便會重疊。
你需要將他們合併爲一個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作爲節點合併後的新值,否則不爲 NULL 的節點將直接作爲新二叉樹的節點。
示例 1:
輸入:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
輸出:
合併後的樹:
3
/ \
4 5
/ \ \
5 4 7
注意: 合併必須從兩個樹的根節點開始。
通過次數43,461 提交次數57,298
解法
這道題比較重要的是讀懂題意,這裏的二叉樹是普通的二叉樹,而不是常用的二叉搜索樹,因而,也不存在調整之類的操作,只需要把相同位置上的節點相加即可。用遞歸可以比較方便地實現。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
TreeNode t3;
if(t1==null && t2==null){
t3 = null;
}
else if(t1==null && t2 !=null){
t3 = t2;
}
else if(t1!=null && t2==null){
t3 = t1;
}
else{
t3 = new TreeNode(t1.val+t2.val);
t3.left = mergeTrees(t1.left, t2.left);
t3.right = mergeTrees(t1.right, t2.right);
}
return t3;
}
}
在 LeetCode 系統中的提交結果如下
執行結果: 通過 顯示詳情
執行用時 : 1 ms, 在所有 Java 提交中擊敗了 68.16% 的用戶
內存消耗 : 39.6 MB, 在所有 Java 提交中擊敗了 94.12% 的用戶