给出前序中序重建二叉树

来源:互联网 发布:python 查看变量大小 编辑:程序博客网 时间:2024/06/15 17:56
class TreeNode {
    int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
//给出前序和中序重建二叉树
public class TreeReBuild {
public static void main(String[] args) {
int[] pretree=new int[]{1,2,4,7,3,5,6,8};
int[] midtree=new int[]{4,7,2,1,5,3,8,6};
reConstructBinaryTree(pretree,midtree);
}


public static TreeNode reConstructBinaryTree(int [] pre,int [] in) {
       return getTreeNode(pre,in,0,pre.length-1,0,in.length-1);
   }
public static TreeNode getTreeNode(int[] pretree,int[] midtree,int a,int b,int c,int d){
TreeNode tree =new TreeNode(pretree[a]);
int i=-1;
for(int j=c;j<=d;j++){
i++;
if(pretree[a]==midtree[j]){
break;
}
}
if(c==d){
tree.left=null;
tree.right=null;
}else if(i==0&&c+i!=d){
tree.left=null;
tree.right=getTreeNode(pretree,midtree,a+1,b,c+1,d);
}else if(c+i==d&&i!=0){
tree.right=null;
tree.left=getTreeNode(pretree,midtree,a+1,b,c,d-1);
}else{
tree.left=getTreeNode(pretree,midtree,a+1,a+i,c,c+i-1);
tree.right=getTreeNode(pretree,midtree,a+i+1,b,c+i+1,d);
}
return tree;
}
}
0 0