class TreeNode:
def __init__(self, val = None, left = None, right = None):
self.val = val
self.left = left
self.right = right
def create_tree(chars):
root, last_node = None, None
is_left = False
stack = []
idx = 0
while idx < len(chars):
char = chars[idx]
if char == '(': # 当为左括号时,下一个字符即为左节点
is_left = True # 将标识符改为True
stack.append(last_node) # 将上一个节点加入栈中
elif char == ',': # 当为逗号时,下一个节点为右节点
is_left = False # 将标识符改为False
elif char == ')': # 当为右括号时,则一个子树结束
is_left = False # 将标识符改为False
stack.pop() # 将已完成构建的根节点出栈(需要理解)
else:
last_node = TreeNode(char) # 构造节点
if not root:
root = last_node # 若无root则将last_node为根节点
else:
parent_node = stack[-1] # 父节点为之前入栈的最后一个节点
if is_left: # 根据标识符构建左右子树
parent_node.left = last_node
else:
parent_node.right = last_node
idx += 1 # 遍历
return root
def print_binary_tree(root, level=0, prefix="Root: "):
if root:
print(' ' * level + prefix + str(root.val))
if root.left or root.right:
print_binary_tree(root.left, level + 1, "Left: ")
print_binary_tree(root.right, level + 1, "Right: ")
data = "A(B,C(D,E))"
root = create_tree(data)
print_binary_tree(root)
算法题:python括号法反序列构造二叉树
于 2023-08-18 11:42:49 首次发布