public class ReconstructionTree {
private static class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
// TODO Auto-generated constructor stub
this.val = val;
}
}
public static void main(String[] args) {
int[] preOrder = { 1, 2, 4, 5, 7, 3, 9 };
int[] inOrder = { 4, 2, 7, 5, 1, 9, 3 };
ReconstructionTree resTree = new ReconstructionTree();
TreeNode root = null;
root = resTree.buildBinaryTree(preOrder, 0, inOrder, 0,
inOrder.length - 1, root);
System.out.println("前续遍历");
resTree.preOrderTree(root);
System.out.println("中序遍历");
resTree.inOrderTree(root);
}
public void preOrderTree(TreeNode root){
if(root!=null){
System.out.print(root.val+" ");
preOrderTree(root.left);
preOrderTree(root.right);
}
}
public void inOrderTree(TreeNode root){
if(root!=null){
inOrderTree(root.left);
System.out.print(root.val+" ");
inOrderTree(root.right);
}
}
private TreeNode buildBinaryTree(int[] preOrder, int index, int[] inOrder,
int beg, int end, TreeNode root) {
// TODO Auto-generated method stub
if (index >= preOrder.length)
return null;
int i;
System.out.println("*"+preOrder[index]+"* beg:"+beg+" end:"+end+" index:"+index);
for (i = 0; i < inOrder.length; i++) {
if (inOrder[i] == preOrder[index]) {
break;
}
}
if(i<beg||i>end)
return null;
root = new TreeNode(preOrder[index]);
System.out.println("i:"+i);
if (i < inOrder.length) {
if (i <= beg)
root.left = null;
else {
root.left = buildBinaryTree(preOrder, index + 1, inOrder, beg,
i - 1, root.left);
}
if (i >=end) {
root.right = null;
} else {
root.right = buildBinaryTree(preOrder, i - beg + index + 1,
inOrder, i + 1, end, root.right);
}
}
return root;
}
}