您的位置:首页 > 其它

给出前序中序重建二叉树

2017-04-06 13:36 239 查看
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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: