重建二叉树 剑指offer
2016-09-14 18:36
239 查看
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
import java.util.Scanner; public class Solution { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Solution solution = new Solution(); // int[] pre= {1,2,4,7,3,5,6,8}; // int[] in = {4,7,2,1,5,3,8,6}; Scanner s = new Scanner(System.in); while(s.hasNextLine()){ String string1 = s.nextLine(); String string2 = s.nextLine(); String[] strArr1 = string1.split(","); String[] strArr2 = string2.split(","); int[] pre = new int[strArr1.length]; int[] in = new int[strArr2.length]; for(int i=0; i<pre.length; i++){ pre[i] = Integer.parseInt(strArr1[i]); in[i] = Integer.parseInt(strArr2[i]); } TreeNode root = solution.reConstructBinaryTree(pre, in); System.out.print(root.value);System.out.print(root.left.value);System.out.print(root.right.value); System.out.print(root.left.left.value);System.out.print(root.left.left.right.value); } } public TreeNode reConstructBinaryTree(int [] pre,int [] in) { if(pre.length==0){ return null; } TreeNode root = new TreeNode(); root.value = pre[0]; int sep = 0; for(int i=0; i<in.length; i++){//求中序的分割点,即根结点位置 if(in[i]==pre[0]){ sep = i; break; } } int[] pre1 = new int[sep]; int[] in1 = new int[sep]; for(int i=1; i<sep+1; i++){//求前序 pre1[i-1] = pre[i]; } for(int i=0; i<sep; i++){//求中序 in1[i] = in[i]; } root.left = reConstructBinaryTree(pre1, in1); //右子树 int[] pre2 = new int[pre.length-sep-1]; int[] in2 = new int[pre2.length]; for(int i=sep+1; i<pre.length; i++){ pre2[i-sep-1] = pre[i]; } for(int i=sep+1; i<in.length; i++){ in2[i-sep-1] = in[i]; } root.right = reConstructBinaryTree(pre2, in2); return root; } } class TreeNode{ int value; TreeNode left; TreeNode right; }
相关文章推荐
- 《剑指offer》-04重建二叉树
- 剑指Offer(4)重建二叉树
- 面试题06_重建二叉树——剑指offer系列
- 剑指offer(C++)——重建二叉树
- 《剑指offer》刷题笔记(树):重建二叉树
- 《剑指offer》根据先序序列与中序序列重建二叉树-Java
- 《剑指Offer》之“重建二叉树”
- 剑指offer系列(5)——重建二叉树
- 《剑指offer》-重建二叉树
- 剑指offer_二叉树---重建二叉树
- 剑指offer——重建二叉树___
- 《剑指offer》面试题6 重建二叉树
- 《剑指offer》重建二叉树
- ?《剑指offer》7.重建二叉树
- 剑指offer-面试题6 重建二叉树
- 剑指offer(四)重建二叉树
- 剑指offer:面试题6--重建二叉树
- 《剑指offer》重建二叉树
- 理解《剑指Offer》之面试题6 重建二叉树
- 剑指OFFER----重建二叉树