重建二叉树——剑指offer
2016-09-03 21:43
309 查看
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。这种解法要复制数组,效率低!!!看后面别人提供的更好思路
public class Main8 { public static TreeNode reConstructBinaryTree(int [] pre,int [] in) { if(pre == null || pre.length ==0|| in==null || in.length==0) return null; TreeNode root=new TreeNode(pre[0]); int i=0; for(;i<in.length;i++){ if(in[i]==pre[0]) break; } int[] pre1=new int[i]; int[] pre2=new int[in.length-i-1]; System.arraycopy(pre, 1, pre1,0, i); System.arraycopy(pre, i+1, pre2,0, in.length-i-1); int[] in1=new int[i]; int[] in2=new int[in.length-i-1]; System.arraycopy(in, 0, in1, 0, i); System.arraycopy(in, i+1, in2, 0, in.length-i-1); root.left=reConstructBinaryTree(pre1, in1); root.right=reConstructBinaryTree(pre2, in2); return root; } public static void main(String[] args) { int[] pre={1,2,4,7,3,5,6,8}; int[] in={4,7,2,1,5,3,8,6}; TreeNode tree=reConstructBinaryTree(pre,in); } }这种方法不用复制数组:
public class Main8 { public static TreeNode reConstructBinaryTree(int [] pre,int [] in) { TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1); return root; } private static TreeNode reConstructBinaryTree(int[] pre,int startPre,int endPre,int[] in,int startIn,int endIn) { if(pre==null || in==null) return null; if(startIn>endIn || startPre>endPre) return null; TreeNode root=new TreeNode(pre[startPre]); for(int i=startIn;i<=endIn;i++){ if(in[i]==pre[startPre]){ root.left=reConstructBinaryTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1); root.right=reConstructBinaryTree(pre,startPre+i-startIn+1,endPre,in,i+1,endIn); } } return root; } public static void main(String[] args) { int[] pre={1,2,4,7,3,5,6,8}; int[] in={4,7,2,1,5,3,8,6}; TreeNode tree=reConstructBinaryTree(pre,in); } }
相关文章推荐
- 重建二叉树-牛客网-剑指offer
- [置顶] 剑指offer:第6题重建二叉树
- 剑指offer 面试题6 重建二叉树
- 剑指offer—重建二叉树
- 剑指Offer:重建二叉树
- 剑指offer: 重建二叉树
- 《剑指Offer》学习笔记--面试题6:重建二叉树
- 剑指offer之重建二叉树 九度1385
- 剑指Offer(第二版)面试题7:重建二叉树
- 剑指offer-重建二叉树
- 剑指Offer系列-面试题6:重建二叉树
- 重建二叉树(参考剑指offer)
- 《剑指offer》—4、重建二叉树
- 剑指Offer:面试题6重建二叉树
- 剑指offer--重建二叉树
- 剑指offer_04_重建二叉树
- 重建二叉树(剑指offer)
- 《剑指Offer》读书笔记---面试题6:重建二叉树
- 剑指offer(三十三)之重建二叉树
- 剑指offer——重建二叉树