合併二叉樹 Java

@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% 的用戶
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章