class Node:
def __init__(self, val=None):
self.val = val
self.left = None
self.right = None
def levelorder(root): # 层级遍历
if not root:
return
res=[]
seq=[root]
while seq:
node=seq.pop(0)
res.append(node.val)
if node.left:
seq.append(node.left)
if node.right:
seq.append(node.right)
return res
def preorder(root): # 前序遍历
res = []
def do_preorder(node):
if not node:
return
res.append(node.val)
do_preorder(node.left)
do_preorder(node.right)
do_preorder(root)
return res
def inorder(root): # 中序遍历
res = []
def do_inorder(node):
if not node:
return
do_inorder(node.left)
res.append(node.val)
do_inorder(node.right)
do_inorder(root)
return res
def postorder(root): # 后序遍历
res = []
def do_postorder(node):
if not node:
return
do_postorder(node.left)
do_postorder(node.right)
res.append(node.val)
do_postorder(root)
return res
def list_to_binarytree(nums): # 列表转二叉树
if not nums:
return
root = Node(nums[0])
seq = [root]
i = 1
while i < len(nums):
node = seq.pop(0)
node.left = Node(nums[i])
if nums[i]:
seq.append(node.left)
node.right = Node(nums[i + 1])
i += 1
if i < len(nums):
node.right = Node(nums[i])
if nums[i]:
seq.append(node.right)
i += 1
return root
def list_to_binarytree(nums): # 递归实现 列表转二叉树
def level(index):
if index >= len(nums):
return None
root = Node(nums[index])
root.left = level(2*index+1)
root.right = level(2*index+2)
return root
return level(0)
datas = input().split()
print(levelorder(list_to_binarytree(datas)))
print(preorder(list_to_binarytree(datas)))
print(inorder(list_to_binarytree(datas)))
print(postorder(list_to_binarytree(datas)))
输入:
1 2 3 4 5 6 7
输出:
['1', '2', '3', '4', '5', '6', '7']
['1', '2', '4', '5', '3', '6', '7']
['4', '2', '5', '1', '6', '3', '7']
['4', '5', '2', '6', '7', '3', '1']