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

그러면 출력은 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)