关于重建二叉树问题已经二叉树前序排列和中序排列求二叉树

package DataStructure;

import java.util.ArrayList;

import java.util.List;

public class niukewang {

/*    

* 本地解决的是二叉树已经前序排列中序排列求二叉树

* 并且已经序列中不存在val相等的节点

* 每个节点都是唯一的一个

*/

   

/*

* 基础

* 1了解什么是前序排列

* 2了解什么是后序排列 

*  

*  

* 方法核心即

*   前序排列的第一个元素为root 

*   在中序排列中找到root对应的位置记住为  i

*   那么中序排列中i的左边为root的左子树

*   右边为右子树  

*   

*   此时根据左子树的中序排列和前序排列查找左子树的root

*   遍历前序中的元素第一个出现在左子树中序列中的元素即为root

*   不断递归即可求解书

*   

*   

*    

*   

*/

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

       

     

 TreeNode root=null;

 

       if(in.length==0)//中序为空

       
return null;

   if(in.length==1)//中序为长度1时此点即为root点

   {

   
root=new TreeNode(in[0]);

   
System.out.println(root);

   
return root;

   }

   

   if(in.length==pre.length)//初始状态前序中序长度一致  前序第一个为根节点

   
root =new TreeNode(pre[0]);

   
else {

   
//子树操作过程

   
for(int j=0;j<pre.length;j++)//遍历前序查找在中序中第一个相等的数作为root

{

   
for(int i=0;i<in.length;i++)

{

if(in[i]==pre[j])

{

root=new TreeNode(in[i]);

break;

}

}

if(root!=null)

break;

}

}

    

   int []  lefin = null;   //左子树中序

   int []  rightin = null;//右子树中序

       

       

          for(int i=0;i<in.length;i++)

       
  

          {

       
  

       
  if( root.val == in[i])

       
  {

       
  

       
  lefin=new int[i];

       
  rightin=new int[in.length-1-i];

       
  System.arraycopy(in, 0, lefin, 0,i);

       
  

       
  System.arraycopy(in, i+1, rightin, 0, in.length-1-i);

       
  

       
  

       
  

       
  }

       
  

          }

 

          System.out.println(root);

          

          root.left=reConstructBinaryTree(pre, lefin);

          root.right=reConstructBinaryTree(pre, rightin);

          return root;

      

         

       

       

   }
 

     

       

   

public static void main(String[] args) {

System.out.println(
reConstructBinaryTree(new  int[]{1,2,4,3,5,6},new int []{4,2,1,5,3,6}));

    

}

}

class TreeNode {

 public TreeNode(){};

   int val;

   TreeNode left;

   TreeNode right;

   TreeNode(int x) { val = x; }

   public String toString(){

return val+””;

 
 

 
 

 
 

   }

   

   

   

}

点赞