1.定义树节点
定义树节点类TreeNode,val表示节点取值,left_node,right_node表示左右子树。
class TreeNode(object):
def __init__(self, data, left_node, right_node):
self.val = data
self.left_node = left_node
self.right_node = right_node
2.根据前序和中序队列构造二叉树
前序遍历顺序为:中左右
中序遍历顺序为:左中右
因此如下图所示,前序队列中的第一个元素为根节点,根节点在中序队列中左边元素是根节点的左子树,右边元素为根节点的右子树。根据此思路,利用递归法构造二叉树。
python代码实现为:
def create_tree(preorder, in_oreder):
if len(preorder) == 0:
return None
root_val = preorder[0]
for root_index, v in enumerate(in_oreder):
if v == root_val:
break
left = create_tree(preorder[1: root_index+1], in_oreder[:root_index])
right = create_tree(preorder[root_index+1:], in_oreder[root_index+1:])
return TreeNode(root_val, left, right)
3.定义前序遍历和中序遍历方法,对结果进行校验
def pre_order_traversal(root):
if root is None:
return
print(root.val, end='')
pre_order_traversal(root.left_node)
pre_order_traversal(root.right_node)
def in_order_traversal(root):
if root is None:
return
in_order_traversal(root.left_node)
print(root.val, end='')
in_order_traversal(root.right_node)
pre_order = [1, 2, 4, 7, 3, 5, 6, 8]
mid_order = [4, 7, 2, 1, 5, 3, 8, 6]
root = create_tree(pre_order, mid_order)
pre_order_traversal(root)
print(' ')
in_order_traversal(root)
输出结果为:
12473568
47215386