@@ -21,33 +21,19 @@ public TreeNode reConstructBinaryTree(int[] pre, int[] in) {
2121 return buildTree(preIndex, in, 0, in.length - 1);
2222}
2323
24- private TreeNode buildTree(Map<Integer, Integer> preIndex,
25- int[] in, int start, int end) {
26- Integer newRootValue = -1;
27- Integer newRootValueIndexInPre = Integer.MAX_VALUE;
28- for (int i = start; i <= end; i++) {
29- Integer cur = preIndex.get(in[i]);
30- if (cur < newRootValueIndexInPre) {
31- newRootValueIndexInPre = cur;
32- newRootValue = in[i];
33- }
24+ private TreeNode buildTree(Map<Integer, Integer> preIndex, int[] in, int start, int end) {
25+ if (start == end) {
26+ return new TreeNode(in[start]);
3427 }
35-
36- Integer newRootValueIndexInIn = 0;
37- for (int i = 0; i < in.length; i++) {
38- if (newRootValue == in[i]) {
39- newRootValueIndexInIn = i;
28+ int indexOfRoot = start;
29+ for (int i = start; i <= end; i++) {
30+ if (preIndex.get(in[i]) < preIndex.get(in[indexOfRoot])) {
31+ indexOfRoot = i;
4032 }
4133 }
42-
43- TreeNode root = new TreeNode(newRootValue);
44-
45- if (start <= newRootValueIndexInIn - 1)
46- root.left = buildTree(preIndex, in, start, newRootValueIndexInIn - 1);
47-
48- if (newRootValueIndexInIn + 1 <= end)
49- root.right = buildTree(preIndex, in, newRootValueIndexInIn + 1, end);
50-
34+ TreeNode root = new TreeNode(in[indexOfRoot]);
35+ if (start <= indexOfRoot - 1) root.left = buildTree(preIndex, in, start, indexOfRoot - 1);
36+ if (indexOfRoot + 1 <= end) root.right = buildTree(preIndex, in, indexOfRoot + 1, end);
5137 return root;
5238}
5339```
0 commit comments