Python-剑指Offer(二):python根据前序和中序队列构造二叉树

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值