从前序与中序遍历中构造二叉树;从中序与后序遍历构造二叉树(力扣105和106)

模仿官方105答案,写出106题

//105题(官方)
class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {int prelen = preorder.length;int inlen = inorder.length;Map<Integer, Integer> map = new HashMap<>();for(int i = 0; i < inlen; i++){map.put(inorder[i], i);}return buildTree(preorder, 0, prelen-1, map, 0, inlen - 1);}private TreeNode buildTree(int[] preorder, int preLeft, int preRight, Map<Integer, Integer> map, int inLeft, int inRight){if(preLeft > preRight || inLeft > inRight){return null;}int rootVal = preorder[preLeft];TreeNode root = new TreeNode(rootVal);int preIndex = map.get(rootVal);//递归左子树//先序遍历中从左边界开始+1开始的(postIndex - inLeft )个元素[preLeft + 1, preIndex - inLeft + preLeft]就对应了中序遍历中从左边界到根节点-1的元素[inLeft, postIndex - 1]root.left = buildTree(preorder, preLeft + 1, preIndex - inLeft + preLeft, map, inLeft, preIndex - 1);//递归右子树//先序遍历中从左边界后的(postIndex - inLeft )的位置开始到右边界的元素[preIndex - inLeft + preLeft + 1, preRight]对应中序遍历中的从根节点+1 到右边界的元素[postIndex + 1, inRight]root.right = buildTree(preorder, preIndex - inLeft + preLeft + 1, preRight, map, preIndex + 1, inRight);return root;}
}
//106(模仿105题就写出来)
class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {int inlen = inorder.length;int postlen = postorder.length;Map<Integer, Integer> map = new HashMap<>();for(int i = 0; i < inlen; i++){map.put(inorder[i], i);}return buildTree(postorder, 0, postlen - 1, map, 0, inlen - 1);}private TreeNode buildTree(int[] postorder, int postLeft, int postRight, Map<Integer, Integer> map, int inLeft, int inRight){if(postLeft > postRight || inLeft > inRight){return null;}int rootVal = postorder[postRight];TreeNode root = new TreeNode(rootVal);int postIndex = map.get(rootVal);//递归左子树//后序遍历中从左边界开始的(postIndex - inLeft )个元素[postLeft, postIndex - inLeft + postLeft - 1]就对应了中序遍历中从左边界到根节点-1的元素[inLeft, postIndex - 1]root.left = buildTree(postorder, postLeft, postIndex - inLeft + postLeft - 1, map, inLeft, postIndex - 1);//递归右子树//后续遍历中从左边界后的(postIndex - inLeft )的位置开始到右边界-1的元素[postIndex - inLeft + postLeft, postRight - 1]对应中序遍历中的从根节点+1 到右边界的元素[postIndex + 1, inRight]root.right = buildTree(postorder, postIndex - inLeft + postLeft, postRight - 1, map, postIndex + 1,inRight );return root;}
}

力扣105和106题相关推荐

  1. 力扣第十五题-三数之和

    前言 力扣第十五题 三数之和 如下所示: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复 ...

  2. 几乎刷完了力扣所有的树题,我发现了这些东西

    点击蓝色"力扣加加"关注我哟 加个"星标",带你揭开算法的神秘面纱! ❝ 这是力扣加加第「28」篇原创文章 先上下本文的提纲,这个是我用 mindmap 画的一 ...

  3. 力扣数据库题目刷题日记

    一个准备秋招的菜鸟 此前已经在力扣上面刷过一些题目,从今天开始记录刷题 1. Day1 96/97题 难度:中等 解题思路 首先需要读懂题目的意思,必须要保证容量大于相同分数的人数的同时,选择最低的分 ...

  4. C#实现力扣双周赛算法题:以组为单位订音乐会的门票订购

    目录: 前言: 一,算法题目描述 二,基本概念理解: 三,例子引入分析 四,代码解释 (1)安排座位函数 (2)查询函数 (2)求出1到RPS内的最小下标 (3)gather函数 (4)scatter ...

  5. 力扣算法1~10题(js)

    标题 力扣算法 文章目录 标题 1.贩卖柠檬水,能否正确找零 错误 思路一: 解法一 缺点:耗时太长 解法二(大佬解法) 2.返回nums中和为target的两个数的下标 解法 3.两数相加 思路与算 ...

  6. 力扣中国(LeetCode) 算法题 有效独数(python)

    判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 ...

  7. 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数

    文章目录 题目 思路 AC代码 后记 题目 从房屋收集雨水需要的最少水桶数 思路 思路是贪心,因为我们需要从左向右找寻所有的水桶数,所以我们对于每一个房屋都优先判断右边是否能放水桶,右边不能放就看左边 ...

  8. leetcode力扣105. 从前序与中序遍历序列构造二叉树

    我是清都山水郎,天教懒慢带疏狂.曾批给露支风券,累奏流云借月章. 诗万首,酒千觞,几曾着眼看侯王.玉楼金阙慵归去,且插梅花醉洛阳.  --朱敦儒 <鹧鸪天> 根据一棵树的前序遍历与中序遍历 ...

  9. 「力扣」第 546 题:移除盒子(很难的动态规划问题)

    参考的题解都已经在代码中注明了. 看这篇题解得到思路: https://leetcode-cn.com/problems/remove-boxes/solution/guan-fang-fang-fa ...

最新文章

  1. 开发日记-20190329
  2. 考前自学系列·计算机组成原理·控制器的组成及各部分的功能
  3. 何时查询2021高考成绩长春市,2020年吉林长春成人高考成绩查询入口(已开通)...
  4. 今日arXiv精选 | 35篇顶会论文:ICCV/ CIKM/ ACM MM
  5. TIOBE 6月排行:C# 以微弱的优势超过了 Visual Basic .NET 的排名,再次进入 TOP 5
  6. 读书精要《从一到无穷大》
  7. 程序员提升工作效率和质量工具
  8. HTML中浮动的特性,浅谈CSS浮动的特性
  9. 计算机专业复试有英语口语吗,计算机考研复试英语口语技巧
  10. 使用OP-AMP电路将DAC0832输出电压转换为电流
  11. MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
  12. python程序下载腾讯企业邮箱附件_python批量下载邮件附件
  13. 解决macbook键盘失灵问题
  14. 光子晶体的应用背景和研究历史
  15. web中间件应用系列:负载均衡(二)负载均衡算法和常见实现方式
  16. 使用七牛云存储解决ios7.1的app部署问题 https
  17. 【蓝桥杯每日一练:北斗七星数】
  18. OPJJ“检查不考虑补货提前期”的测试1
  19. Centos7.3安装TP-LINK驱动 TL-WDN5200H
  20. Oracle启用、禁用触发器

热门文章

  1. “低价魔法”失效后,绿茶如何自救?
  2. MySQL索引学习(100万数据做对比)
  3. 写稿机器人下载,自动写稿机器人下载,写稿机器人有哪些
  4. 河南科技大计算机专业录取分数线,河南科技大学历年各专业录取分数一览表
  5. 社交新零售系统开发介绍
  6. 国内外计算机视觉的差距在哪里?
  7. Micro-expression recognition: an updated review of current trends,challenges and solutions 论文笔记
  8. IDEA 内存 闪退 过大 过小
  9. 前端CSS @media 媒体查询PC端
  10. MAF: ProviderChangeSupport PropertyChangeSupport