LeetCode #617 Merge Two Binary Trees 병합 트리

4263 단어
Description: 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: 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.
제목 설명: 그들을 새로운 두 갈래 나무로 합쳐야 한다.결합의 규칙은 두 노드가 중첩되면 그들의 값을 노드가 합쳐진 후의 새로운 값으로 추가하는 것이다. 그렇지 않으면 NULL이 아닌 노드는 새로운 두 갈래 나무의 노드로 직접 사용된다.
예: 예 1:
입력:
    Tree 1                     Tree 2                  
          1                         2                             
         / \                       / \                            
        3   2                     1   3                        
       /                           \   \                      
      5                             4   7          

출력: 결합된 트리:
         3
        / \
       4   5
      / \   \ 
     5   4   7

참고: 결합은 두 트리의 루트 노드에서 시작해야 합니다.
생각:
  • 교체, 모든 결점에 접근, 비어 있으면 추가하고 창고에 삽입, 그렇지 않으면 결점 비어 있는 곳으로 출력하여 교환할 수 있습니다
  • 귀속, 먼저 뿌리 결점을 합친 다음에 왼쪽 트리 오른쪽 트리를 합치면 제자리에서 시간 복잡도 O(n), 공간 복잡도 O(n)를 직접 진행할 수 있다

  • 코드: C++:
    /**
     * 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) {
            stack s;
            if (!t1 && !t2) return NULL;
            TreeNode* result = !t1 ? t1 : t2;
            TreeNode* temp = !t2 ? t2 : t1;
            if (temp) result -> val += temp -> val;
            s.push(result);
            s.push(temp);
            while (s.size()) {
                TreeNode* q = s.top();
                s.pop();
                TreeNode* p = s.top();
                s.pop();
                if (!q) continue;
                if (p -> left && q -> left) {
                    p -> left -> val += q -> left -> val;
                    s.push(p -> left);
                    s.push(q -> left);
                } else if (!p -> left && q -> left) p -> left = q -> left;
                if (p -> right && q -> right) {
                    p -> right -> val += q -> right -> val;
                    s.push(p -> right);
                    s.push(q -> right);
                } else if (!p -> right && q -> right) p -> right = q -> right;
            }
            return result;
        }
    };
    

    Java:
    /**
     * 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) {
            if (t1 == null) return t2;
            if (t2 == null) return t1;
            t1.val += t2.val;
            t1.left = mergeTrees(t1.left, t2.left);
            t1.right = mergeTrees(t1.right, t2.right);
            return t1;
        }
    }
    

    Python:
    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
            if t1 and t2:
                t1.val += t2.val
                t1.left = self.mergeTrees(t1.left, t2.left)
                t1.right = self.mergeTrees(t1.right, t2.right)
            return t1 or t2
    

    좋은 웹페이지 즐겨찾기