• 由前序遍历和中序遍历构建二叉树-Python


    思路:

    1、由二叉树的前(先)序序列和中序序列建立该二叉树

    分析:若二叉树的任意两个结点的值都不相同,则二叉树的前序序列和中序序列能唯一确定一棵二叉树。另外,由前序序列和中序序列的定义可知,前序序列中第一个结点必为根结点,而在中序序列中,根结点刚好是左、右子树的分界点,因此,可按如下方法建立二叉树:

    1. 用前序序列的第一个结点作为根结点;

    2. 在中序序列中查找根结点的位置,并以此为界将中序序列划分为左、右两个序列(左、右子树);

    3. 根据左、右子树的中序序列中的结点个数,将前序序列去掉根结点后的序列划分为左、右两个序列,它们分别是左、右子树的前序序列;

    4. 对左、右子树的前序序列和中序序列递归地实施同样方法,直到所得左、右子树为空。

    例如:假设前序序列为ABDGHCEFI,中序序列为GDHBAECIF

    解决:

    def rebuild_tree(preorder, inorder):
        if len(preorder) == 0:
            return
        elif len(inorder) == 1:
            return TreeNode(inorder[0])
        else:
            root = preorder[0] # 根据先序找到根节点
            depth = inorder.index(root)     # 找出当前节点在中序遍历的位置,左侧为左子树,右侧为右子树
            temp = TreeNode(root)           # 前序遍历中,去掉首节点,先序的左半边为depth,右半边为depth+1到末尾。之后递归调用rebuild_tree
            temp.left = rebuild_tree(preorder[1:depth+1], inorder[:depth])
            temp.right = rebuild_tree(preorder[depth+1:], inorder[depth+1:])
        return temp
    时刻记着自己要成为什么样的人!
  • 相关阅读:
    Pycharm2019.1.2安装详解
    下载及安装Python详细步骤
    ClientDataSet中撤消与恢复操作及执行细节
    Delphi KeyPress KeyDown时Key的值
    fastReport动态传参【含图片】
    Delphi静态和动态调用dll的实例
    关于SPC系统
    SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句
    SqlServer 资源占用情况[简易]
    Sqlserver DMV诊断和调优DB性能
  • 原文地址:https://www.cnblogs.com/demo-deng/p/15236009.html
Copyright © 2020-2023  润新知