java实现——006重建二叉树
2014-05-08 09:13
190 查看
public class T006 { 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}; preorderTraversalRec(construct(pre,in,8)); } public static void preorderTraversalRec(TreeNode root) { if (root == null) { return; } System.out.print(root.val + " "); preorderTraversalRec(root.left); preorderTraversalRec(root.right); } public static TreeNode construct(int[] pre,int[] in,int length){ if(pre == null ||in == null||length<=0) return null; return constructCore(pre,in,0,length-1,0,length-1); } public static TreeNode constructCore(int[] pre,int[] in,int startPre,int endPre,int startIn,int endIn){ int rootValue = pre[startPre]; TreeNode root = new TreeNode(rootValue); root.left = null; root.right = null; if(startPre == endPre){ if(startIn == endIn&&startPre==startIn){ System.out.println("root"); return root; } } int rootIn = startIn; while(rootIn<=endIn&&in[rootIn]!=rootValue){ ++ rootIn; } if(rootIn == endIn&&in[rootIn]!=rootValue){ System.out.println("Invalid input2"); } int leftLength = rootIn - startIn; int leftPreEnd = startPre + leftLength; if(leftLength>0){ root.left = constructCore(pre,in,startPre+1,leftPreEnd,startIn,rootIn-1); } if(leftLength<endPre-startPre){ root.right = constructCore(pre,in,leftPreEnd+1,endPre,rootIn+1,endIn); } return root; } private static class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; } } }
相关文章推荐
- JAVA实现重建二叉树(《剑指offer》)
- JAVA实现重建二叉树(《剑指offer》)
- java实现重建二叉树
- 【剑指offer——JAVA实现】重建二叉树(含思路解答示意图)
- 剑指offer编程题Java实现——面试题6重建二叉树
- 数据结构与算法分析笔记与总结(java实现)--二叉树24:重建二叉树
- 《剑指offer》问题7 重建二叉树 Java实现
- 【编程之美】java实现重建二叉树
- 《剑指offer》编程题java实现(二十六):重建二叉树(两种方法)
- 剑指offer----重建二叉树---java实现
- 剑指offer|面试题6:重建二叉树(Java实现)
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)
- 剑指offer面试题6:重建二叉树(Java实现)
- 一直二叉树的前序遍历和中序遍历的结果,重建该二叉树 Java代码实现
- 根据先序和中序遍历重建二叉树java实现
- 剑指Offer:面试题6——重建二叉树(java实现)
- 根据前序遍历和中序遍历重建二叉树的Java实现
- Java实现由前序序列和中序序列重建二叉树,并后序输出。
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)(二)
- java实现 重建二叉树