[LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal
时间:2020-05-22
本文章向大家介绍[LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal,主要包括[LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
inorder = [9,3,15,20,7] postorder = [9,15,7,20,3]Return the following binary tree:
3 / \ 9 20 / \ 15 7
从中序和后序遍历序列构造二叉树。题目就是题意,影子题105,几乎一模一样。
思路还是递归/分治。因为有了后序遍历所以后序遍历的最后一个node就是根节点。有了根节点,可以依据这个根节点在inorder遍历的位置,将inorder的结果分成左子树和右子树。照着例子解释一下,
inorder = [9,3,15,20,7] - 9是左子树,15,20,7是右子树
postorder = [9,15,7,20,3] - 3是根节点
思路和代码可以参照105题,几乎是一样的。
时间O(n)
空间O(n)
Java实现
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public TreeNode buildTree(int[] inorder, int[] postorder) { 12 // corner case 13 if (inorder == null || postorder == null || inorder.length == 0 || postorder.length == 0) { 14 return null; 15 } 16 return helper(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1); 17 } 18 19 private TreeNode helper(int[] inorder, int inStart, int inEnd, int[] postorder, int pStart, int pEnd) { 20 // corner case 21 if (inStart > inEnd || pStart > pEnd) { 22 return null; 23 } 24 TreeNode root = new TreeNode(postorder[pEnd]); 25 int index = 0; 26 while (inorder[inStart + index] != postorder[pEnd]) { 27 index++; 28 } 29 root.left = helper(inorder, inStart, inStart + index - 1, postorder, pStart, pStart + index - 1); 30 root.right = helper(inorder, inStart + index + 1, inEnd, postorder, pStart + index, pEnd - 1); 31 return root; 32 } 33 }
相关题目
105. Construct Binary Tree from Preorder and Inorder Traversal
106. Construct Binary Tree from Inorder and Postorder Traversal
原文地址:https://www.cnblogs.com/cnoodle/p/12936155.html
- hdu----(1528)Card Game Cheater(最大匹配/贪心)
- hdu-----(1507)Uncle Tom's Inherited Land*(二分匹配)
- hdu----149850 years, 50 colors(最小覆盖点)
- hdu------1281 棋盘游戏(最小覆盖点)
- hdu-----(1179)Ollivanders: Makers of Fine Wands since 382 BC.(二分匹配)
- hdu-----(1151)Air Raid(最小覆盖路径)
- hdu-----(1150)Machine Schedule(最小覆盖点)
- 【重磅】微软Facebook联手发布AI生态系统,CNTK+Caffe2+PyTorch挑战TensorFlow
- hduoj-----(1068)Girls and Boys(二分匹配)
- 使用Django suit或Bootstrap美化admin模板
- hdu---------(1026)Ignatius and the Princess I(bfs+dfs)
- hdu-----(1113)Word Amalgamation(字符串排序)
- HDUoj-------(1128)Self Numbers
- cf------(round 2)A. Winner
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ubuntu环境下安装memcache及启动的方法
- Linux下批量修改服务器用户密码方法步骤
- Linux 常用文本处理命令和vim文本编辑器
- centos7利用yum安装lnmp的教程(linux+nginx+php7.1+mysql5.7)
- linux根据进程号PID查找启动程序的全路径
- linux服务器安装PHP扩展zip,zlib方法
- Lamp环境下设置绑定apache域名的方法分析
- Linux杀不死的进程之CPU使用率700%解决方法
- 解读Linux下ip命令展示的网络连接信息
- Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现
- Linux环境使用g++编译C++方法总结
- linux命令实现音频格式转换和拼接的方法
- Apache 解决80端口占用问题
- Centos7搭建主从DNS服务器的教程
- ubuntu 下JDK环境变量配置方法