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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal

例:

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

解析:

使用递归调用,每次递归存储当前子树的根节点。先序遍历的第一个即为根节点。将先序遍历的第一个节点在中序遍历中找出,在中序遍历中此节点的左边为左子树,右边为右子树。记录左子树的长度L_left,先序遍历中第一个节点(也就是根节点)向后L_left长度即为左子树,然后剩余的为右子树。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def buildTree(self, preorder, inorder):""":type preorder: List[int]:type inorder: List[int]:rtype: TreeNode"""def build(pre_left, pre_right, mid_left, mid_right):  # 递归函数if pre_left > pre_right or mid_left > mid_right:  # 终止条件return Noneroot = TreeNode(preorder[pre_left])  # 存储根节点mid_root = mid_leftwhile mid_root <= mid_right and inorder[mid_root] != preorder[pre_left]:mid_root += 1  # 寻找中序遍历中的根节点diff = mid_root - mid_left  # 左子树长度root.left = build(pre_left + 1, pre_left + diff, mid_left, mid_root - 1)  #左子树root.right = build(pre_left + 1 + diff, pre_right, mid_root + 1, mid_right)  # 右子树return root  # 返回根节点return build(0, len(preorder) - 1, 0, len(inorder) - 1)

从前序与中序遍历序列构造二叉树Python解法相关推荐

  1. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  2. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  3. [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

    [问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  4. 二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)

    17(105) 从前序与中序遍历序列构造二叉树(Medium) 描述 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 示例 例如,给出前序遍历 preorder = ...

  5. 【LeetCode】【HOT】105. 从前序与中序遍历序列构造二叉树(哈希表+递归)

    [LeetCode][HOT]105. 从前序与中序遍历序列构造二叉树 文章目录 [LeetCode][HOT]105. 从前序与中序遍历序列构造二叉树 package hot;import java ...

  6. 二叉树 中序遍历 python_leetcode No.105 从前序与中序遍历序列构造二叉树

    题目链接: 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)​leetcode-cn.com 题目描述: 根据一棵树的前序遍历与中序遍历构造二叉树,可以假设树中没有重复的元素. 示例: 前 ...

  7. 找树左下角的值+路径总和+从前序和中序遍历序列构造二叉树(day18*)

    这篇可以主要关注一下如何确定递归时是否需要返回值. LC513. 找树左下角的值 给定一个二叉树的根节点,请找出该二叉树的 最底层最左边 节点的值. 思路1 层序遍历 class Solution:d ...

  8. 【必拿下系列】106. 从中序与后序遍历序列构造二叉树105从前序与中序遍历序列构造二叉树

    两题各自的链接放这里了: 链接: 106 链接: 105 106.从中序与后序遍历序列构造二叉树 如果你是不知道理论的,那就得仔细分析了, 举个例子: 输入:inorder = [9,3,15,20, ...

  9. LeetCode 刷题之旅(2020.05.22)——105. 从前序与中序遍历序列构造二叉树(中)

    LeetCode 刷题之旅(2020.05.22)--105. 从前序与中序遍历序列构造二叉树(中) 题目: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如, ...

最新文章

  1. iPhone为什么关机后仍可定位?“永远在线”处理器断电时也能启动Find My
  2. qt 主动打开虚拟键盘_ipad键盘有用吗?
  3. 织梦二次开发写php,PHP教程—DedeCMS二次开发(二)
  4. 如何利用CNKI句子检索功能提高研究效率
  5. 从零开始学习OpenCL开发(一)架构
  6. expect 普通用户自动输入密码到root下,执行命令
  7. 关于TaskStatus状态WaitingForChildrenToComplete 的疑问
  8. 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较
  9. 使用kettle导入数据到ADB for PostgreSQL
  10. CSS:CSS+JS制作可折叠内容块
  11. OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
  12. 用notepad++打造自己的C/C++语言IDE --是时候和DOS屏幕说再见了
  13. gcc中使用rpath指定优先搜索路径
  14. Canvas旋转元素
  15. 移动U盘数据恢复,移动U盘数据恢复方法
  16. GB35114—②、公共安全视频监控联网信息安全系统互联结构
  17. aws篇1 aws-cli的使用
  18. 【无人机】【2017.12】基于AGENT的防御群建模分析
  19. 通用管理平台GBase 8c Platform
  20. 2020 中国移动的流量套餐

热门文章

  1. 如何利用Excel计算有多少种组合?
  2. 为什么 SAP 电商云 Spartacus UI RouterModule.forChild 传入的 path 为 null
  3. 一个最简单的 Github workflow 例子
  4. Jasmine里的describe,it和expect函数
  5. SAP Spartacus StoreFeatureModule
  6. Java Spring里getBean方法的实现
  7. Groovy里使用Runnable实现多线程
  8. 一个抓取网站图片并提供批量下载功能的Chrome扩展
  9. electronics.local在SAP Hybris中出现的几个位置
  10. backend system available odata service detection