|
1 | 1 | class Solution {
|
2 | 2 | public TreeNode buildTree(int[] preorder, int[] inorder) {
|
3 |
| - if (preorder == null || inorder == null || preorder.length != inorder.length) { |
4 |
| - return null; |
5 |
| - } |
6 |
| - |
7 |
| - return buildTreeHelper(preorder, inorder, 0, 0, inorder.length - 1); |
| 3 | + return helper(preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1); |
8 | 4 | }
|
9 | 5 |
|
10 |
| - private TreeNode buildTreeHelper(int[] preorder, int[] inorder, int preStart, int inStart, int inEnd) { |
11 |
| - if (preStart > preorder.length - 1 || inStart > inEnd) { |
| 6 | + private TreeNode helper(int[] preorder, int[] inorder, int preStart, int preEnd, int inStart, int inEnd) { |
| 7 | + if (preStart > preEnd || inStart > inEnd) { |
12 | 8 | return null;
|
13 | 9 | }
|
14 | 10 |
|
15 | 11 | TreeNode root = new TreeNode(preorder[preStart]);
|
| 12 | + int rootIdx = 0; |
16 | 13 |
|
17 |
| - int inOrderIdx = preStart; |
18 |
| - for (int i = 0; i < inorder.length; i++) { |
19 |
| - if (root.val == inorder[i]) { |
20 |
| - inOrderIdx = i; |
| 14 | + for (int i = inStart; i <= inEnd; i++) { |
| 15 | + if (inorder[i] == root.val) { |
| 16 | + rootIdx = i; |
21 | 17 | break;
|
22 | 18 | }
|
23 | 19 | }
|
24 | 20 |
|
25 |
| - int leftTreeLength = inOrderIdx - inStart; |
| 21 | + root.left = helper(preorder, inorder, preStart + 1, preEnd, inStart, rootIdx - 1); |
| 22 | + root.right = helper(preorder, inorder, preStart + rootIdx - inStart + 1, preEnd, rootIdx + 1, inEnd); |
26 | 23 |
|
27 |
| - root.left = buildTreeHelper(preorder, inorder, preStart + 1, inStart, inOrderIdx - 1); |
28 |
| - root.right = buildTreeHelper(preorder, inorder, preStart + leftTreeLength + 1, inOrderIdx + 1, inEnd); |
| 24 | + return root; |
29 | 25 | }
|
30 | 26 | }
|
0 commit comments