106. 从中序与后序遍历序列构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。

注意: 你可以假设树中没有重复的元素。

例如,给出

中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:    3   / \  9  20    /  \   15   7

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/

Link:https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/

递归

基本的思路是用postorder最后一个作为跟节点,然后根据inorder值的位置,来确定左子树+右子树

普通递归

class Solution:    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:        if len(inorder) == 0 or len(postorder) == 0:            return None        val = postorder.pop()        root = TreeNode(val)        i = inorder.index(val)        root.right = self.buildTree(inorder[i + 1:], postorder)        root.left = self.buildTree(inorder[:i], postorder)        return root

优化递归

⚠️注意,由于没有重复元素

1.先用字典做一个反向索引,加速查找index的速度2.使用下标,而不是新建一个数组

    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:        self.map_inorder = {}        for i in range(len(inorder)):            self.map_inorder[inorder[i]] = i        return self.helper(inorder, postorder, 0, len(inorder) - 1)    def helper(self, inorder: List[int], postorder: List[int], low: int, high: int) -> TreeNode:        if low > high:            return None        val = postorder.pop()        root = TreeNode(val)        i = self.map_inorder[val]        root.right = self.helper(inorder, postorder, i + 1, high)        root.left = self.helper(inorder, postorder, low, i - 1)        return root

空间优化递归

先创建右子树部分,然后在做左边

class Solution:    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:        return self.helper(inorder, postorder, None)    def helper(self, inorder: List[int], postorder: List[int], stop: TreeNode) -> TreeNode:        if len(inorder) == 0 or inorder[-1] == stop:            return None        val = postorder.pop()        root = TreeNode(val)        root.right = self.helper(inorder, postorder, val)        inorder.pop()        root.left = self.helper(inorder, postorder, stop)        return root

--End--

数组反向遍历ios_LeetCode106.从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inor...)...相关推荐

  1. [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...

  2. 016.从中序与后序遍历序列构造二叉树

    题目链接: 106. 从中序与后序遍历序列构造二叉树 大概思路: 题目要求: 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder ...

  3. Suzy找到实习了吗Day 18 | 二叉树进行中:513 找树左下角的值,112 路径总和 ,106.从中序与后序遍历序列构造二叉树

    513 找树左下角的值 solution # Definition for a binary tree node. # class TreeNode: # def __init__(self, val ...

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

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

  5. 代码随想录第18天|找树左下角的值,路径总和,从中序和后序遍历序列构造二叉树

    LeetCode513.找树左下角的值 题目链接:513. 找树左下角的值 - 力扣(LeetCode) 思路: 迭代法(只需要记录最后一行第一个节点的数值就可以了.): /*** Definitio ...

  6. 【算法】有序链表转换二叉搜索树和从中序与后序遍历序列构造二叉树Java解答参考

    三道算法题 1.有序链表转换二叉搜索树 Java代码参考 2.从中序与后序遍历序列构造二叉树 Java代码参考 3.移除元素 Java代码参考 1.有序链表转换二叉搜索树 给定一个单链表,其中的元素按 ...

  7. 把一个数组的值存入二叉树中,然后利用前序、中序、后序3种方式进行遍历(完整代码以及运行结果)(Java)

    把一个数组的值存入二叉树中,然后利用前序.中序.后序3种方式进行遍历(完整代码以及运行结果) 在最近的面试过程中,听说有小伙伴被面试官要求创建二叉树,然后对该二叉树进行遍历,感觉这一直以来都是一个大家 ...

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

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

  9. leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法

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

最新文章

  1. SVM支持向量机(上)
  2. php文件上传错误代码
  3. Mybatis的生命周期及作用域
  4. SPSS教程及常用操作参考表 —— 一篇文章解决对SPSS的所有疑问
  5. c语言常见头文件大全,C语言头文件大全(free)
  6. 6,美国2012年总统候选人政治献金数据分析
  7. docker更改映射端口(实践篇)
  8. centos访问window共享目录
  9. 【智能硬件】Jetson nana 扩展显存(内存)
  10. 创维智能电视(SKYWORTH)如何开启U盘安装(酷开系统)
  11. PMP备考错题集-模拟题一
  12. mysql查询本用户的表的列名等信息_mysql常用命令查询手册
  13. 【JS】307- 复习 Object.assign 原理及其实现
  14. 小红帽linux各功能中英,小红帽「中英文对照」
  15. ABBYY FineReader如何创建用户语言
  16. 一个Linux下的网络模拟工具 Core
  17. 从零开始安装Fate
  18. 图纸文档管理系统让设计变得更简单、规范
  19. MySQL Explain详解,explain查询结果每列含义详细解释
  20. php eds,​能谱仪EDS

热门文章

  1. 美团_cc城市自定义
  2. 最土团购系统数据结构数据字典二次开发宝典
  3. Uploadify_THINKPHP配置说明
  4. redis主从复制实验,使用ruby
  5. 程序设计基本概念(3)(sizeof)-2.20 2.23
  6. 制造业采购审批流程设计示例
  7. 车辆行人检测数据集_开源 | 相机和激光雷达融合的行人车辆检测跟踪
  8. java 抽象工厂工厂_Java设计模式之简单工厂、工厂方法和抽象工厂
  9. webpack版本查看_浅谈webpack技术
  10. 小眼睛适合大框还是小框眼镜_北京潘家园眼镜城良心商家推荐