• 剑指Offer(四):重建二叉树


    一、前言

    刷题平台:牛客网

    二、题目

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    1、思路

    通常树有如下几种遍历方式:

    • 前序遍历:先访问根结点,再访问左子结点,最后访问右子结点。
    • 中序遍历:先访问左子结点,再访问根结点,最后访问右子结点。
    • 后序遍历:先访问左子结点,再访问右子结点,最后访问根结点。

    本题为前序遍历和中序遍历,最少需要两种遍历方式,才能重建二叉树。

    前序遍历序列中,第一个数字总是树的根结点的值。在中序遍历序列中,根结点的值在序列的中间,左子树的结点的值位于根结点的值的左边,而右子树的结点的值位于根结点的值的右边。剩下的我们可以递归来实现,具体如图:

    剑指Offer(四):重建二叉树

    2、代码

    Python:

    # -*- coding:utf-8 -*-
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    class Solution:
        # 返回构造的TreeNode根节点
        def reConstructBinaryTree(self, pre, tin):
            # write code here
            if len(pre) == 0:
                return None
            elif len(pre) == 1:
                return TreeNode(pre[0])
            else:
                root = TreeNode(pre[0])
                pos = tin.index(pre[0])
                root.left = self.reConstructBinaryTree(pre[1:pos+1], tin[:pos])
                root.right = self.reConstructBinaryTree(pre[pos+1:], tin[pos+1:])
            return root
  • 相关阅读:
    设计模式(简述)
    sql注入防御
    两个防SQL注入过滤代码
    SQL注入实战利用“dbo”获得SQL管理权限和系统权限
    SQL注入技术和跨站脚本攻击的检测
    蓝雨设计整站SQL注入漏洞
    SQL注入攻击零距离
    菜鸟入门级:SQL注入攻击
    三步堵死SQL注入漏洞
    终极防范SQL注入漏洞
  • 原文地址:https://www.cnblogs.com/ceo-python/p/11729455.html
Copyright © 2020-2023  润新知