zoukankan      html  css  js  c++  java
  • 剑指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
  • 相关阅读:
    django之--模型层(ORM语法)
    mysql问题记录
    CentOS系统内存使用问题(内存是拿来用的,而不是拿来看的)
    CentOS6&CentOS7安装FFmpeg
    django之--模板层
    Django之--视图层
    Django之ORM学习2--路由层
    Django之ORM学习
    Django入门
    第二版mq 数据结构选型
  • 原文地址:https://www.cnblogs.com/ceo-python/p/11729455.html
Copyright © 2011-2022 走看看