Construct Binary Tree from Inorder and Postorder Traversal
2015-09-27 14:26
330 查看
题意:
给定一棵树的中序和后续遍历序列,还原出这棵树;
分析:
简单,后续遍历的最后一个元素肯定是根节点,然后再中序遍历中找到根节点,此节点之前的元素必属于根节点左子树,之后的元素必定属于根节点右子树;然后再后序遍历序列中找到相同长度的左子树和右子树的序列,递归。。。
给定一棵树的中序和后续遍历序列,还原出这棵树;
分析:
简单,后续遍历的最后一个元素肯定是根节点,然后再中序遍历中找到根节点,此节点之前的元素必属于根节点左子树,之后的元素必定属于根节点右子树;然后再后序遍历序列中找到相同长度的左子树和右子树的序列,递归。。。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { int n = inorder.length; return buildTree(inorder, postorder, 0, n, 0, n); } public TreeNode buildTree(int[] inorder, int[] postorder, int i1, int i2, int p1, int p2) { if(i1 >= i2){ return null; } int value = postorder[p2 - 1]; TreeNode root = new TreeNode(value); int i; for(i = i1;i < i2; i++){ if(inorder[i] == value){ break; } } int length = i - i1; root.left = buildTree(inorder, postorder, i1, i, p1, p1 + length); root.right = buildTree(inorder, postorder, i+1, i2, p1 + length, p2 - 1); return root; } }
相关文章推荐
- JAVA基础学习day17--集合工具类-Collections
- 黑马程序员---java基础---面向对象中的构造方法及static关键字,变量的问题
- CoreData 实体之间的关系
- 总结学生选课Dao类相应代码,对应数据库表的内容进行修改
- 找回linux丢失的磁盘空间
- linux下C语言UDP通信
- UI:数据的解析XML与JSON
- 如何选择适合自己公司的移动办公系统?
- 20135223何伟钦—信息安全系统设计基础第二周学习总结
- leetcode007 Reverse Integer
- 从SQL server数据库取数据显示到Net Beans界面上
- Openstack 概念架构详解
- np_xtcxyczjh-IV 整理II[改良宏 重写双向链表接口 自动测试程序]
- java关键字——static
- 安卓报错 column '_id' does not exist 的解决
- 教程分享:如何实现Android沉浸式状态栏——教你让你的状态栏变个色!
- 线程池
- SDWebImage缓存图片的机制
- 解决输出中文乱码问题
- Android L SDK -- 一些有趣的新功能