티스토리 뷰

cs/알고리즘

leetCode - Merge Two Binary Trees

vivelakorea 2021. 3. 24. 01:10

leetcode.com/problems/merge-two-binary-trees/

 

풀이 1)

class Solution:
    def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
        
        if not root1:
            return root2
        if not root2:
            return root1
        
        def dfs(node1, node2):
            node1.val += node2.val
            if node1.left and not node2.left:
                node2.left = TreeNode()
            if node2.left and not node1.left:
                node1.left = TreeNode()
            if node1.right and not node2.right:
                node2.right = TreeNode()
            if node2.right and not node1.right:
                node1.right = TreeNode()
                
            if node1.left:
                dfs(node1.left, node2.left)
            if node1.right:
                dfs(node1.right, node2.right)

        dfs(root1, root2)
        
        return root1

두 트리를 모두 dfs로 들어가면서 양쪽 중 한 쪽의 왼쪽/오른쪽 노드가 없는 부분을 0으로 만들어서 넣어준다. 

node1.left 는 node1이 None이면 에러가 나므로 예외 케이스 1) root1 == None, 2) root2 == None 인 경우를 함수 맨 앞에서 처리한다.

 

매우 난해한 풀이이다..

 

 

 

풀이 2)

class Solution:
    def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
        
        if root1 and root2:
            node = TreeNode(root1.val + root2.val)
            node.left = self.mergeTrees(root1.left, root2.left)
            node.right = self.mergeTrees(root1.right, root2.right)
            
            return node
        
        else:
            return root1 or root2

merge sort 처럼 그냥 '무책임하게 재귀로 떠넘기기' 하면 된다

'cs > 알고리즘' 카테고리의 다른 글

leetCode - Network Delay Time  (0) 2021.03.21
leetCode - Subsets  (0) 2021.03.13
leetCode - Combination Sum  (0) 2021.03.13
leetCode - Combinations  (0) 2021.03.13
leetCode - Permutations  (0) 2021.03.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함