算法分析與設計——LeetCode Problem.617 Merge Two Binary Trees

問題詳情

Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.

You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tree.

Example 1:

Input: 
    Tree 1                     Tree 2                  
          1                         2                             
         / \                       / \                            
        3   2                     1   3                        
       /                           \   \                      
      5                             4   7                  
Output: 
Merged tree:
         3
        / \
       4   5
      / \   \ 
     5   4   7

Note: The merging process must start from the root nodes of both trees.

數據結構爲:

struct TreeNode {
     int val;
     TreeNode *left;
     TreeNode *right;
     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
}

問題分析及思路

這道題是要講兩個二叉樹合併,新的二叉樹的每個位置的值爲原來兩個二叉樹對應位置的值之和,運用遞歸解決即可。
算法複雜度與二叉樹的最高層數有關。


具體代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        if (!t1) return t2;  
        if (!t2) return t1;  

        TreeNode* nownode = new TreeNode(t1 -> val + t2 -> val);  
        nownode -> left = mergeTrees(t1-> left, t2 -> left);  
        nownode -> right = mergeTrees(t1 -> right, t2 -> right);  
        return nownode;  
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章