给出前序中序重建二叉树
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;
}
}
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;
}
}
相关文章推荐
- 【编程题】根据前序中序重建二叉树
- 数据结构之二叉树1(前序中序后序层序遍历,重建二叉树)
- 剑指Offer-- 重建二叉树 前序中序建立二叉树
- 剑指Offer面试题6重建二叉树(根据前序中序输出后序)
- 重建二叉树,给出一个二叉树的前序和中序遍历,恢复二叉树的结构
- 根据前序中序序列重建二叉树
- 给出前序与中序 序列 重建二叉树
- 面试题-前序中序序列重建二叉树
- Construct Binary Tree from Preorder and Inorder Traversal (给出前序中序求二叉树)
- 每天一个算法之根据前序中序序列重建二叉树
- 重建二叉树
- JDOJ-重建二叉树
- 2016/11/10 1001. 二叉树重建
- java-从先序遍历和中序遍历重建二叉树
- [剑指offer]重建二叉树
- 剑指OFFER之重建二叉树(九度OJ1385)
- 编程之美--重建二叉树
- 小白+根据前序中序构造后序二叉树
- 根据先序和中序还原(重建)一个二叉树
- 【21】重建二叉树