【leetcode100】从前序与中序遍历序列构造二叉树

1、题目描述

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:

复制代码
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]

2、初始思路

2.1 思路

前序遍历中第一个节点为根节点,根据根节点可以在中序遍历中分辨出来左子树和右子树的节点,然后按照相同的方法,可以构建左子树和右子树的子树。

复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
        #方便查找根节点的位置
        dic = {}
        for i in range(len(inorder)):
            dic[inorder[i]] = i
        def tree(root,left,right):
            if left > right:
                return
            #节点在前序遍历中的位置索引
            i = dic[preorder[root]]
            node = TreeNode(preorder[root])
            #见图
            node.left = tree(root+1,left,i-1)
            node.right = tree(i-left+root+1,i+1,right)
            return node
        return tree(0,0,len(preorder)-1)

以下为node.left = tree(root+1,left,i-1),node.right = tree(i-left+root+1,i+1,right)的图解。

相关推荐
风吹夏回7 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
kkeeper~7 小时前
0基础C语言积跬步之数据在内存中的存储
c语言·数据结构·算法
小熊Coding7 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋97 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本7 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
田里的水稻8 小时前
OE_ubuntu26.04与宿主机之间复制粘贴内容
人工智能·python·机器人
wabs6668 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_876964139 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
jiayong239 小时前
02 创建虚拟环境
python
旺仔来了9 小时前
不联网的Linux下部署python环境
linux·开发语言·python