怎么在Python中创建一个二叉树 - 开发技术 - 亿速云
class node():
def __init__(self, k=None, l=None, r=None):
self.val = k
self.left = l
self.right = r
def create_tree(val, root):
"""
终止条件是什么, 字符串用完
本次递归要干什么
本次递归返回给上一级是什么?
:param val:
:param root:
:return:
"""
# 结束
if len(val) == 0:
return root
# 本次要干什么,生成中左右
if val[0] != '#':
root = node(val[0])
val.pop(0)
root.left = create_tree(val, root.left)
root.right = create_tree(val, root.right)
return root
else:
root = None
val.pop(0)
return root
# 层序遍历
def levelorder(root):
res = []
level = [root]
while level:
res.append([node.val for node in level])
temp = []
for node in level:
temp.extend([node.left, node.right])
level = [leaf for leaf in temp if leaf]
return res
# 前序遍历
def preorderTraversal(now, result=[]):
if now == None:
return result
result.append(now.val)
preorderTraversal(now.left, result)
preorderTraversal(now.right, result)
return result
# 中序遍历
def intermediateTraversal(now, result=[]):
if now == None:
return result
intermediateTraversal(now.left, result)
result.append(now.val)
intermediateTraversal(now.right, result)
return result
# 后序遍历
def postorderTraversal(now, result=[]):
if now == None:
return
postorderTraversal(now.left, result)
postorderTraversal(now.right, result)
result.append(now.val)
return result
if __name__ == '__main__':
Root = None
strs = "abc##d##e##" # 前序遍历扩展的二叉树序列
vals = list(strs)
Roots = create_tree(vals, Root) # Roots就是我们要的二叉树的根节点。
res1 = levelorder(Roots)
print(res1)
res2 = preorderTraversal(Roots, result=[])
print(res2)
res3 = intermediateTraversal(Roots, result=[])
print(res3)
res4 = postorderTraversal(Roots, result=[])
print(res4)



