[Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
【问题描述】[中等]
【解答思路】
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][根据前序和后序遍历构造二叉树][分治][递归]相关推荐
- 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树
leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...
- 根据前序和后序遍历构造二叉树(附前序中序代码)
889. 根据前序和后序遍历构造二叉树 前序和中序 道理相同 改变一些细节就可以了,在最后附上了前序中序的代码 题目描述 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值 ...
- 从前中后序遍历构造二叉树,三题无脑秒杀
如果只是前中后序遍历的其中一种,是不可能唯一确定一个二叉树的,必须是其中两个的结合,由此便产生了三道题目,在这里可以全部秒杀. 需要记住的要点是: 前序(根左右)--第一个节点一定是根节点: 中序(左 ...
- java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...
前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...
- 二叉树经典题之从前序和中序遍历构建二叉树
前言: 二叉树刷题是有固定思维的,请移步 README]二叉树刷题框架 文章目录 前言: 从前序和中序遍历构建二叉树 思路 代码 注意 从中序和后序遍历构建二叉树 思路 代码 从前序和中序遍历构建二叉 ...
- [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]
[问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...
- 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 ...
- [leetcode] 105.从前序与中序遍历构造二叉树
给定一棵树的前序遍历 preorder 与中序遍历 inorder.请构造二叉树并返回其根节点. 示例 1: Input: preorder = [3,9,20,15,7], inorder = [ ...
- Leetcode105. 从前序和中序遍历构造二叉树 -- 递归
题目 解题思路 先序遍历顺序:根左右: 中序遍历顺序:左根右: 根据先序得到根节点位置: 根据根节点位置 结合中序,得到左右子树: 先序遍历.中序遍历中左右子树个数相同,可求出先序.中序中左右子树的下 ...
最新文章
- JavaScript中处理日期的一些函数和方法
- Windows 命令行终端 PowerShell 美化计划
- FFmpeg在Intel GPU上的硬件加速与优化
- PS教程:如何批量处理图片
- [转帖]解密微软中间语言MSIL之调试程序(1)
- 中国移动试商用GPS手机导航业务 包月资费15元
- Qt5.7 win10环境 调试器未设置问题解决
- 让页面在打开时自动刷新
- linux远程备份视频教程,linux实现自动远程备份(scp+ssh)
- 接口中定义的成员变量是( )。_C++:如何正确的定义一个接口类
- 大二学生web期末大作业 在线电影网站 HTML+CSS+JS
- WebSocket + 微信小程序 一对一聊天
- leetcode算法88.合并两个有序数组
- 地方棋牌为何一夜之间风靡大街小巷
- Kettle 全量抽取数据
- 1秒生成证件照——小米云证件照微信小程序
- ZeroMQ 中文指南 第一章 ZeroMQ基础【转载】
- Zigbee HA 框架学习笔记
- 整理项目管理中的挣值管理相关计算 AC PV EV BAC CV SV CPI SPI ETC EAC 计算
- JavaScript基础知识之BOM
热门文章
- [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
- 设计模式学习笔记一——开篇
- 关于某些人和某些事的断想
- apollo报:系统出错,请重试或联系系统负责人
- 2019王小的Java学习之路
- outerDocument访问外部属性方法
- bootstrp-table 获取checkbox选中行的数据id
- 筛选法求1到100以内的素数
- 股上涨和下跌天数比_面对下跌,如何信心十足地逢低买入?
- android webview 图表,Android WebView 无法正常显示网页图表