class TreeNode:
def __init__(self, val = None, left = None, right = None):
self.val = val
self.left = left
self.right = right
def create_tree(root, vals):
if len(vals) == 0: # vals用完了直接返回
return root
if vals[0] != '#': # 构建root, root.left, root.right
root = TreeNode(vals[0])
vals.pop(0)
root.left = create_tree(root.left, vals)
root.right = created_tree(root.right, vals)
return root # 本次递归要返回给上一次的本层构造好的树的根节点
else:
root = None
vals.pop(0)
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: ")
root = None
strs = "abc##d##e##"
vals = list(strs)
roots = create_tree(root, vals)
print_binary_tree(roots)
不要纠结于递归的整体流程,会让自己迷失,关注本层操作。