Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 이진 트리에서 자식이 하나만 있는 모든 노드를 제거하는 프로그램은 무엇입니까?

<시간/>

바이너리 트리 루트가 있다고 가정합니다. 자식이 하나만 있는 모든 노드를 제거해야 합니다.

따라서 입력이 다음과 같으면

Python의 이진 트리에서 자식이 하나만 있는 모든 노드를 제거하는 프로그램은 무엇입니까?

그러면 출력은

Python의 이진 트리에서 자식이 하나만 있는 모든 노드를 제거하는 프로그램은 무엇입니까?

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • solve()라는 메서드를 정의하면 트리 루트가 사용됩니다.

  • 루트가 null이면

    • 루트 반환

  • 루트의 왼쪽이 null이고 루트의 오른쪽이 null이면

    • 루트 반환

  • 루트의 왼쪽이 null이면

    • 해결 반환(루트 오른쪽)

  • 루트의 오른쪽이 null이면

    • 해결 반환(루트 왼쪽)

  • 루트 왼쪽 :=해결(루트 왼쪽)

  • 루트 오른쪽 :=해결(루트 오른쪽)

  • 루트 반환


예시

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right

def print_tree(root):
   if root is not None:
      print_tree(root.left)
      print(root.data, end = ', ')
      print_tree(root.right)

class Solution:
   def solve(self, root):
      if not root:
         return root

      if not root.left and not root.right:
         return root

      if not root.left:
         return self.solve(root.right)

      if not root.right:
         return self.solve(root.left)

      root.left = self.solve(root.left)
      root.right = self.solve(root.right)

      return root

ob = Solution()
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.right.right = TreeNode(5)
root.left.left.right = TreeNode(6)
root.right.right.left = TreeNode(7)
root.right.right.right = TreeNode(8)

res = ob.solve(root)
print_tree(res)

입력

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.right.right = TreeNode(5)
root.left.left.right = TreeNode(6)
root.right.right.left = TreeNode(7)
root.right.right.right = TreeNode(8)

출력

6, 1, 7, 5, 8,