1. 程式人生 > >通過中序和前序遍歷重建二叉樹

通過中序和前序遍歷重建二叉樹

import java.util.*;

class TreeNode{

int val;

TreeNode left;

TreeNode right;

TreeNode(int val){

	 this.val =val;
}

}

public class binary {

public static void main(String args[]) {

   int[] a={1,2,4,7,3,5,6,8};
   
   int[] b={4,7,2,1,5,3,8,6};
   
   reConstructBinaryTree(a,b);
   
  
}

public static TreeNode reConstructBinaryTree(int [] pre,int [] in) {

   TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
   
  return root;

} //前序遍歷{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6}

private static TreeNode reConstructBinaryTree(int [] pre,int startPre,int endPre,int [] in,int startIn,int endIn) {

  if(startPre>endPre||startIn>endIn)
  
      return null;
	  
  TreeNode root=new TreeNode(pre[startPre]);
  
  System.out.println(root.val);
  
    
  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,i-startIn+startPre+1,endPre,in,i+1,endIn);
		  
      }
            
  return root;