【问题描述】[中等]

【解答思路】

copyOfRange

class Solution {public TreeNode constructFromPrePost(int[] pre, int[] post) {if(pre==null || pre.length==0) {return null;}return dfs(pre,post);}private TreeNode dfs(int[] pre,int[] post) {if(pre==null || pre.length==0) {return null;}//数组长度为1时,直接返回即可if(pre.length==1) {return new TreeNode(pre[0]);}//根据前序数组的第一个元素,创建根节点 TreeNode root = new TreeNode(pre[0]);int n = pre.length;for(int i=0;i<post.length;++i) {if(pre[1]==post[i]) {//根据前序数组第二个元素,确定后序数组左子树范围int left_count = i+1;//拆分前序和后序数组,分成四份int[] pre_left = Arrays.copyOfRange(pre,1,left_count+1);int[] pre_right = Arrays.copyOfRange(pre,left_count+1,n);int[] post_left = Arrays.copyOfRange(post,0,left_count);int[] post_right = Arrays.copyOfRange(post,left_count,n-1);//递归执行前序数组左边、后序数组左边root.left = dfs(pre_left,post_left);//递归执行前序数组右边、后序数组右边root.right = dfs(pre_right,post_right);break;}}//返回根节点return root;}
}   作者:wang_ni_ma
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-postorder-traversal/solution/tu-jie-889-gen-ju-qian-xu-he-hou-xu-bian-li-gou-2/

【总结】

1.前中后序遍历变化的是[中]的位置,左到右的顺序不改变
  • 前序遍历 中左右
  • 中序遍历 左中右
  • 后续遍历 左右中
2.还原二叉树 借助HashMap or copyOfRange

根据前序和后序遍历构造二叉树
[Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
前序+中序遍历可画出原二叉树
[Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]
后续+中序遍历可画出原二叉树
[Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]

3. 多画图 写写写 遍历代码 手撕变量 大脑保持清醒

[Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]相关推荐

  1. 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树

    leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...

  2. 根据前序和后序遍历构造二叉树(附前序中序代码)

    889. 根据前序和后序遍历构造二叉树 前序和中序 道理相同 改变一些细节就可以了,在最后附上了前序中序的代码 题目描述 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值 ...

  3. 从前中后序遍历构造二叉树,三题无脑秒杀

    如果只是前中后序遍历的其中一种,是不可能唯一确定一个二叉树的,必须是其中两个的结合,由此便产生了三道题目,在这里可以全部秒杀. 需要记住的要点是: 前序(根左右)--第一个节点一定是根节点: 中序(左 ...

  4. java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...

    前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...

  5. 二叉树经典题之从前序和中序遍历构建二叉树

    前言: 二叉树刷题是有固定思维的,请移步 README]二叉树刷题框架 文章目录 前言: 从前序和中序遍历构建二叉树 思路 代码 注意 从中序和后序遍历构建二叉树 思路 代码 从前序和中序遍历构建二叉 ...

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

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

  7. leetcode题解:Construct Binary Tree from Preorder and Inorder Traversal (根据前序和中序遍历构造二叉树)...

    题目: Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume ...

  8. [leetcode] 105.从前序与中序遍历构造二叉树

    给定一棵树的前序遍历 preorder 与中序遍历  inorder.请构造二叉树并返回其根节点. 示例 1: Input: preorder = [3,9,20,15,7], inorder = [ ...

  9. Leetcode105. 从前序和中序遍历构造二叉树 -- 递归

    题目 解题思路 先序遍历顺序:根左右: 中序遍历顺序:左根右: 根据先序得到根节点位置: 根据根节点位置 结合中序,得到左右子树: 先序遍历.中序遍历中左右子树个数相同,可求出先序.中序中左右子树的下 ...

最新文章

  1. JavaScript中处理日期的一些函数和方法
  2. Windows 命令行终端 PowerShell 美化计划
  3. FFmpeg在Intel GPU上的硬件加速与优化
  4. PS教程:如何批量处理图片
  5. [转帖]解密微软中间语言MSIL之调试程序(1)
  6. 中国移动试商用GPS手机导航业务 包月资费15元
  7. Qt5.7 win10环境 调试器未设置问题解决
  8. 让页面在打开时自动刷新
  9. linux远程备份视频教程,linux实现自动远程备份(scp+ssh)
  10. 接口中定义的成员变量是( )。_C++:如何正确的定义一个接口类
  11. 大二学生web期末大作业 在线电影网站 HTML+CSS+JS
  12. WebSocket + 微信小程序 一对一聊天
  13. leetcode算法88.合并两个有序数组
  14. 地方棋牌为何一夜之间风靡大街小巷
  15. Kettle 全量抽取数据
  16. 1秒生成证件照——小米云证件照微信小程序
  17. ZeroMQ 中文指南 第一章 ZeroMQ基础【转载】
  18. Zigbee HA 框架学习笔记
  19. 整理项目管理中的挣值管理相关计算 AC PV EV BAC CV SV CPI SPI ETC EAC 计算
  20. JavaScript基础知识之BOM

热门文章

  1. [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
  2. 设计模式学习笔记一——开篇
  3. 关于某些人和某些事的断想
  4. apollo报:系统出错,请重试或联系系统负责人
  5. 2019王小的Java学习之路
  6. outerDocument访问外部属性方法
  7. bootstrp-table 获取checkbox选中行的数据id
  8. 筛选法求1到100以内的素数
  9. 股上涨和下跌天数比_面对下跌,如何信心十足地逢低买入?
  10. android webview 图表,Android WebView 无法正常显示网页图表