[leedcode 105] Construct Binary Tree from Preorder and Inorder Traversal
2015-07-21 21:12
375 查看
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
Note:
You may assume that duplicates do not exist in the tree.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { //The preorder and inorder traversals for the binary tree above is: /* preorder = {7,10,4,3,1,2,8,11} inorder = {4,10,3,1,7,11,8,2} The first node in preorder alwasy the root of the tree. We can break the tree like: 1st round: preorder: {7}, {10,4,3,1}, {2,8,11} inorder: {4,10,3,1}, {7}, {11, 8,2} 可以发现,一趟遍历可以将数组一份为二,分别对应左子树集合和右子树集合 使用preorder数组定位跟节点,利用inorder数组分左右子树。 关键点: 1 定位每层的根节点 2 计算好offset 注意getTree函数的定义*/ public TreeNode buildTree(int[] preorder, int[] inorder) { if(preorder.length!=inorder.length||preorder.length==0) return null; return getTree(preorder,0,preorder.length-1,inorder,0,inorder.length-1); } TreeNode getTree(int[] preorder,int left1,int right1,int[] inorder,int left2,int right2){ if(left1>right1) return null; if(left2>right2) return null; int temp=preorder[left1]; TreeNode node=new TreeNode(temp); int index=left2; for(;index<=right2;index++){ if(inorder[index]==temp)break; } int len=index-left2; node.left=getTree(preorder,left1+1,left1+len,inorder,left2,index-1); node.right=getTree(preorder,left1+len+1,right1,inorder,index+1,right2); return node; } }
相关文章推荐
- 00-自测4. Have Fun with Numbers (20)
- hdu5294||2015多校联合第一场1007 最短路+最大流
- ARC工程导人非ARC的代码
- 图像处理与计算机视觉基础,经典以及最近发展
- oracle取整操作
- TCP/IP协议
- 011.Singleton 单例模式
- 012.private protect public 访问控制符
- Python中choice用法与三元操作
- ./configure报错mv: cannot move './confsjjYiM/out' to 'cmake/Makefile': Permission denied
- BZOJ 1303: [CQOI2009]中位数图( )
- android LinearLayout设置selector不起作用解决
- LeetCode学习笔记
- 50个强大的Python模块
- UVa 10623 - Thinking Backward (平面图的欧拉公式)
- 00-自测3. 数组元素循环右移问题 (20)
- UVA11426 GCD - Extreme (II) 小于n的数对的gcd之和
- LeetCode 7 Reverse Integer 这道题被血虐
- TCP三次握手详解!
- 杭电1860 统计字符