您的位置:首页 > 编程语言 > Java开发

重建二叉树

2017-01-12 11:59 281 查看

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

Java Code

public class RebuildTree {
public static void main(String[] args)
{
int[] pre = {1,2,4,7,3,5,6,8};
int[] in = {4,7,2,1,5,3,8,6};

TreeNode root = SolutionOne.reConstructBinaryTree(pre,in);
SolutionOne.Traverse(root);
System.out.println();

}
}

class SolutionOne
{
public static TreeNode reConstructBinaryTree(int [] pre,int [] in)
{
return reBuildBinaryTree(pre,in,0,pre.length-1,0,in.length-1);

}

public static TreeNode reBuildBinaryTree(int[] pre,int [] in,int preLeft,int preRight,int inLeft,int inRight)
{
if(preLeft > preRight || inLeft > inRight) return null;

TreeNode root = new TreeNode(pre[preLeft]);

for(int pos = inLeft; pos<= inRight; pos++)
{
if(in[pos] == root.val){
root.left = reBuildBinaryTree(pre,in,preLeft+1,preLeft+pos-inLeft,inLeft,pos-1);
root.right = reBuildBinaryTree(pre,in,preLeft+pos+1-inLeft,preRight,pos+1,inRight);
}
}
return root;
}

public static void Traverse(TreeNode root)
{
if(root == null) return;
Traverse(root.left);
System.out.print(root.val + " ");
Traverse(root.right);
}
}

class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val = x;
}
}


注意要注意代码中pos表示的含义,之前一直没有成功是因为将preLeft+pos-inLeft写成了preLeft+pos,并没有减去inLeft
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 二叉树