【LeetCode】226. Invert Binary Tree 해제

질문으로 연결

문제 개요


주어진 나무 두 그루를 좌우로 뒤집다.
예:
입력:
     4
   /   \
  2     7
 / \   / \
1   3 6   9
출력:
     4
   /   \
  7     2
 / \   / \
9   6 3   1

생각


차례로 실현되다.
먼저 노드가 0인 경우root = [] 반환하면 됩니다.
그럼 null때는 어떨까요?예를 들어 생각해 보자.
1.'뿌리'자는 그대로 두면 된다.
     4
   /   \
  2     7
 / \   / \
1   3 6   9
2. 뿌리째 바뀐 ⑦root != []와 ②root.left
     4
   /   \
  7     2
 / \   / \
6   9 1   3
상기 결과와 예상 출력을 비교하고 ⑥ 연결된 ⑥과 ⑥는 반전이 필요하다.
root.right라고 생각되면 2. 단계와 동일하게 뿌리가 연결된 ⑥root 및 ⑥root.left를 교체할 수 있습니다.
②에 대해서도 마찬가지로 조작한다.
     4
   /   \
  7     2
 / \   / \
9   6 1   3
이로써 기대하는 출력을 얻는다.
이상,
  • root.right의 노드에서 null 반환
  • 스위치 nullroot.left
  • 의 조작은 차례로 처리할 수 있다.
         4
       /   \
      7     2
     / \   / \
    9   6 3   1
    

    주의점


    응답 프로그램의 "#주의!"의 일부가 손실되면 예상 출력을 가져올 수 없습니다.
    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution(object):
        def invertTree(self, root):
            """
            :type root: TreeNode
            :rtype: TreeNode
            """
            if root is None:
                return None
            
            # 注意!
            L = self.invertTree(root.right)
            R = self.invertTree(root.left)
            
            root.left = L
            root.right = R
            return root
    
    이것은,
    class Solution(object):
        def invertTree(self, root):
            """
            :type root: TreeNode
            :rtype: TreeNode
            """
            if root is None:
                return None
                 
            root.left = self.invertTree(root.right)
            root.right = self.invertTree(root.left)
            return root
    
    가 실행되었을 때 root.right에서 반전root.left의 노드에 덮어쓰고 다음 처리
    root.left = self.invertTree(root.right)
    
    때문에 원래root.right를 잃었다.

    좋은 웹페이지 즐겨찾기