题目:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
解答:
1 public class Solution { 2 3 public static TreeNode reConstructBinaryTree(int[] pre, int[] in) { 4 if(pre == null || in == null || pre.length != in.length) { 5 return null; 6 } 7 8 return createTree(pre, 0, pre.length-1, in, 0, in.length-1); 9 } 10 11 private static TreeNode createTree(int[] pre, int preStart, int preEnd, int inStart, int inEnd) { 12 if(preStart > preEnd || inStart > inEnd) { 13 return null; 14 } 15 16 TreeNode root = new TreeNode(pre[preStart]); 17 root.left = root.right = null; 18 19 for(int i = 0; i <= inEnd; i++) { 20 if(pre[preStart] == in[i]) { 21 root.left = createTree(pre, preStart+1,preStart+i-inStart, in, inStart, i-1); 22 23 root.right = createTree(pre, preStart+i-inStart+1, preEnd, in, i+1, inEnd); 24 } 25 } 26 27 return root; 28 } 29 }