中序和后序构建二叉树
2016-02-23 17:01
197 查看
题目描述
Given inorder and postorder traversal of a tree, construct the binary tree.题目解答
解题思路
在inorder找到root,然后划分左右递归构建
代码实现
public class ConstructTreeFromInAndPost { public TreeNode buildTree(int[] inorder, int[] postorder) { if(inorder == null || postorder == null || inorder.length != postorder.length || inorder.length == 0) return null; return buildTreeCore(inorder, 0, inorder.length-1, postorder, 0, postorder.length-1); } public TreeNode buildTreeCore(int[] inorder, int s1, int e1, int[] postorder, int s2, int e2) { if(s1 > e1 || s2 > e2) return null; TreeNode root = new TreeNode(postorder[e2]); int rootIndex = -1; for(int i = s1; i <= e1; i++){ if(inorder[i] == root.val){ rootIndex = i; break; } } if(rootIndex == -1) return null; int leftSize = rootIndex - s1; int rightSize = e1 - rootIndex; root.left = buildTreeCore(inorder, s1, rootIndex-1, postorder, s2, s2+leftSize-1); root.right = buildTreeCore(inorder, rootIndex+1, e1, postorder, e2-rightSize, e2-1); return root; } public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } }
相关文章推荐
- 关于Unity5版本动画系统中anystate跳转重复播放当前动画解决方案
- 基于redis 内存数据库简单使用
- 面试题示例
- 制式问题
- 递归进制转换
- Windows Phone 7编程学习点滴三——12种启动器和4种选择器
- iOS 数据存储 - NSKeyedArchiver
- iOS 数据存储 - NSUserDefaults
- iOS 数据存储 - Plist
- 代码集合
- Activity详解 (三) : Activity启动模式
- ajax 下载文件
- 【微服务干货系列】使用微服务架构之前,你必须知道的
- classes.dex硬编码后重签名安装
- CSS3 新属性
- HttpClient 处理中文乱码
- iOS QuartzCore - CALayer
- iOS QuartzCore - 2D绘图
- 码农,公务员,国外博士后谁更厉害?
- Unity3D学习笔记(一)界面介绍