leetcode題目-合併二叉樹+(算法優化感悟)

合併二叉樹

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

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



示例 1:

輸入: 
	Tree 1                     Tree 2                  
          1                         2                             
         / \                       / \                            
        3   2                     1   3                        
       /                           \   \                      
      5                             4   7                  
輸出: 
合併後的樹:
	     3
	    / \
	   4   5
	  / \   \ 
	 5   4   7

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/merge-two-binary-trees
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處

代碼:

 public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if (t1 == null && t2 == null) {//當兩個樹都爲空,終止
            return null;
        }
        if (t1 == null) { //t1爲null,則把t2給t1,把t2這放到t1樹上
            t1 = new TreeNode(t2.val);
            t1.left = mergeTrees(null, t2.left);
            t1.right = mergeTrees(null, t2.right);
        } else if (t2 == null) { //t2爲null,直接遍歷t1
            t1.left = mergeTrees(t1.left, null);
            t1.right = mergeTrees(t1.right, null);
        } else {//同時遍歷兩棵樹進行合併
            t1.val = t1.val + t2.val;
            t1.left = mergeTrees(t1.left, t2.left);
            t1.right = mergeTrees(t1.right, t2.right);
        }
        return t1;
    }

上面這塊代碼是第一次通過時的代碼邏輯(看了優化過的代碼,感覺特別糟糕,進行反思。。。。。。)。看來看去有些臃腫,之前寫算法,特別是關於遞歸的邏輯,很少優化,因爲本身代碼量就很少,邏輯就那幾句,就沒去在乎優化。
在做這道題的時候,看到有三個if條件,並遞歸方法寫了三遍,總共六行,肯定有些臃腫了,就想優化一下。
之前叫過兩位同學解過這道題,想看清一下自己的實力,是能力不足,還是做的不夠到位,順便加深印象,提升技術,可惜兩位同學沒有給到迴應。。。。。
下面記錄一下優化後的代碼:

 public TreeNode mergeTreesRefactor(TreeNode t1, TreeNode t2) {
        if (t1 == null && t2 == null) {
            return null;
        }
        if (t1 == null) {
            return t2;//這不就是t2麼,就不需要下面的遍歷了,t1已經結束了
        }
        if (t2 == null) {
            return t1;//這不就是t1麼,就不需要下面的遍歷了,t2已經結束了
        } else {
            t1.val = t1.val + t2.val;
            t1.left = mergeTreesRefactor(t1.left, t2.left);
            t1.right = mergeTreesRefactor(t1.right, t2.right);
        }
        return t1;
    }

結束!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章