重建二叉树

题目:

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。

解答:

 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 }

原文地址:https://www.cnblogs.com/wylwyl/p/10462658.html