begin = end
if end < len(s) and s[end] == '(':
stack = []
stack.append(s[end])
end += 1
while end < len(s) and stack:
if s[end] == '(':
stack.append(s[end])
if s[end] == ')':
stack.pop()
end += 1
root.left = traverse(s[begin+1:end-1], 0)
begin = end
if end < len(s) and s[end] == '(':
stack = []
stack.append(s[end])
end += 1
while end < len(s) and stack:
if s[end] == '(':
stack.append(s[end])
if s[end] == ')':
stack.pop()
end += 1
root.right = traverse(s[begin+1:end-1], 0)
最後的結果
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def str2tree(self, s: str) -> Optional[TreeNode]:
def traverse(s, begin):
end = begin
if begin == len(s):
return None
while end < len(s) and (s[end].isdigit() or s[end] == '-'):
end += 1
root = TreeNode(int(s[begin:end]))
begin = end
if end < len(s) and s[end] == '(':
stack = []
stack.append(s[end])
end += 1
while end < len(s) and stack:
if s[end] == '(':
stack.append(s[end])
if s[end] == ')':
stack.pop()
end += 1
root.left = traverse(s[begin+1:end-1], 0)
begin = end
if end < len(s) and s[end] == '(':
stack = []
stack.append(s[end])
end += 1
while end < len(s) and stack:
if s[end] == '(':
stack.append(s[end])
if s[end] == ')':
stack.pop()
end += 1
root.right = traverse(s[begin+1:end-1], 0)
return root
return traverse(s, 0)