从前序与中序遍历序列构造二叉树Python解法
给定两个整数数组 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解法相关推荐
- 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...
- 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...
- [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]
[问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...
- 二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)
17(105) 从前序与中序遍历序列构造二叉树(Medium) 描述 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 示例 例如,给出前序遍历 preorder = ...
- 【LeetCode】【HOT】105. 从前序与中序遍历序列构造二叉树(哈希表+递归)
[LeetCode][HOT]105. 从前序与中序遍历序列构造二叉树 文章目录 [LeetCode][HOT]105. 从前序与中序遍历序列构造二叉树 package hot;import java ...
- 二叉树 中序遍历 python_leetcode No.105 从前序与中序遍历序列构造二叉树
题目链接: 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)leetcode-cn.com 题目描述: 根据一棵树的前序遍历与中序遍历构造二叉树,可以假设树中没有重复的元素. 示例: 前 ...
- 找树左下角的值+路径总和+从前序和中序遍历序列构造二叉树(day18*)
这篇可以主要关注一下如何确定递归时是否需要返回值. LC513. 找树左下角的值 给定一个二叉树的根节点,请找出该二叉树的 最底层最左边 节点的值. 思路1 层序遍历 class Solution:d ...
- 【必拿下系列】106. 从中序与后序遍历序列构造二叉树105从前序与中序遍历序列构造二叉树
两题各自的链接放这里了: 链接: 106 链接: 105 106.从中序与后序遍历序列构造二叉树 如果你是不知道理论的,那就得仔细分析了, 举个例子: 输入:inorder = [9,3,15,20, ...
- LeetCode 刷题之旅(2020.05.22)——105. 从前序与中序遍历序列构造二叉树(中)
LeetCode 刷题之旅(2020.05.22)--105. 从前序与中序遍历序列构造二叉树(中) 题目: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如, ...
最新文章
- iPhone为什么关机后仍可定位?“永远在线”处理器断电时也能启动Find My
- qt 主动打开虚拟键盘_ipad键盘有用吗?
- 织梦二次开发写php,PHP教程—DedeCMS二次开发(二)
- 如何利用CNKI句子检索功能提高研究效率
- 从零开始学习OpenCL开发(一)架构
- expect 普通用户自动输入密码到root下,执行命令
- 关于TaskStatus状态WaitingForChildrenToComplete 的疑问
- 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较
- 使用kettle导入数据到ADB for PostgreSQL
- CSS:CSS+JS制作可折叠内容块
- OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
- 用notepad++打造自己的C/C++语言IDE --是时候和DOS屏幕说再见了
- gcc中使用rpath指定优先搜索路径
- Canvas旋转元素
- 移动U盘数据恢复,移动U盘数据恢复方法
- GB35114—②、公共安全视频监控联网信息安全系统互联结构
- aws篇1 aws-cli的使用
- 【无人机】【2017.12】基于AGENT的防御群建模分析
- 通用管理平台GBase 8c Platform
- 2020 中国移动的流量套餐
热门文章
- 如何利用Excel计算有多少种组合?
- 为什么 SAP 电商云 Spartacus UI RouterModule.forChild 传入的 path 为 null
- 一个最简单的 Github workflow 例子
- Jasmine里的describe,it和expect函数
- SAP Spartacus StoreFeatureModule
- Java Spring里getBean方法的实现
- Groovy里使用Runnable实现多线程
- 一个抓取网站图片并提供批量下载功能的Chrome扩展
- electronics.local在SAP Hybris中出现的几个位置
- backend system available odata service detection