根据前序和中序遍历输出二叉树
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; } }