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

Python의 이진 트리에서 문자열 생성

<시간/>

이진 트리가 있다고 가정해 봅시다. 문자열을 괄호와 정수로 구성해야 하며, 사전 순서 순회 방식을 사용하는 이진 트리의 정수로 구성되어야 합니다. null 노드는 빈 괄호 쌍 "()"으로 표시됩니다. 그리고 문자열과 원래 바이너리 트리 간의 일대일 매핑 관계에 영향을 주지 않는 모든 빈 괄호 쌍을 생략해야 합니다.

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

Python의 이진 트리에서 문자열 생성

그러면 출력은 5(6()(8))(7)

가 됩니다.

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

  • ans :=빈 문자열
  • pot() 함수를 정의합니다. 노드가 필요합니다. s
  • 가 null이면
    • 빈 문자열 반환
  • 노드의 왼쪽 또는 오른쪽이 null이면
    • node.data 반환
  • ss :=node.data
  • node.left가 null이 아니면
    • ss :=ss 연결 '(' 연결 pot(node.left, 공백 문자열) 연결 ')'
  • 그렇지 않으면
    • ss :=ss 연결 '()'
  • node.right가 null이 아니면
    • ss :=ss 연결 '(' 연결 포트(node.right, 공백 문자열) 연결 ')'
  • 반환
  • 메인 방법에서 다음을 수행하십시오 -
  • 반환 포트(t, 빈 문자열)

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
def insert(temp,data):
      que = []
      que.append(temp)
      while (len(que)):
         temp = que[0]
         que.pop(0)
         if (not temp.left):
            if data is not None:
               temp.left = TreeNode(data)
            else:
               temp.left = TreeNode(0)
            break
         else:
            que.append(temp.left)
         if (not temp.right):
            if data is not None:
               temp.right = TreeNode(data)
            else:
               temp.right = TreeNode(0)
            break
         else:
            que.append(temp.right)
def make_tree(elements):
   Tree = TreeNode(elements[0])
   for element in elements[1:]:
      insert(Tree, element)
   return Tree
class Solution:
   def tree2str(self, t: TreeNode):
      ans = ''
      def pot(node, s):
         if node == None or node.data == 0:
            return ''
         if node.left == node.right == None:
            return str(node.data)
         ss = str(node.data)
         if node.left != None:
            ss = ss + '(' + pot(node.left, '') + ')'
         else:
            ss = ss + '()'
         if node.right != None:
            ss = ss + '(' + pot(node.right, '') + ')'
         return ss
      return pot(t, '')
ob = Solution()
root = make_tree([5,6,7,None,8])
print(ob.tree2str(root))

입력

[5,6,7,None,8]

출력

5(6()(8))(7)