zoukankan      html  css  js  c++  java
  • leetcode 105. 从前序与中序遍历序列构造二叉树

    相关概念

    先序遍历:根节点,左节点,右节点
    中序遍历:左节点,根节点,右节点

    所以构建二叉树的问题本质上就是:

    找到各个子树的根节点 root
    构建该根节点的左子树
    构建该根节点的右子树

    递归思路:

    代码:

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def buildTree(self, preorder, inorder):
            """
            :type preorder: List[int]
            :type inorder: List[int]
            :rtype: TreeNode
            """
            if len(inorder) == 0:
                return None
            root = TreeNode(preorder[0]) # 以第一个先序节点作为根节点
            mid = inorder.index(preorder[0]) # 找到根节点所在中序中的位置,其左边的作为左子树,右边的作为右子树
            #我们在 inorder 中找到 mid 为根节点的下标
            #由于中序遍历特性,mid 左侧都为左子树节点,所以左子树的节点有 mid 个
            #那么同样的,由于前序遍历的特性,preorder 第一个元素(根节点)后跟着的就是它的左子树节点,一共有 mid 个,所以切了 [1:mid+1] 出来
            # 构建左子树
            root.left = self.buildTree(preorder[1:mid+1],inorder[:mid])
            # 构建右子树
            root.right = self.buildTree(preorder[mid+1:],inorder[mid+1:])
            return root
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    SqlBulkCopy实现大容量数据快速插入数据库中
    防查询语句注入漏洞攻击
    wpf中数据绑定(Datacontext)的应用
    WPF中StackPanel的使用方法
    可空类型的使用《二》
    关于可空数据类型的介绍
    C# 之泛型详解
    C# 之String以及浅拷贝与深拷贝
    C# 小软件部分(二)
    MVC 之HTML辅助方法
  • 原文地址:https://www.cnblogs.com/gcter/p/15338421.html
Copyright © 2011-2022 走看看