|
|
@ -33,3 +33,35 @@ class Solution { |
|
|
|
} |
|
|
|
} |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```java |
|
|
|
|
|
|
|
class Solution { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public TreeNode buildTree(int[] preorder, int[] inorder) { |
|
|
|
|
|
|
|
if (preorder == null || preorder.length == 0) { |
|
|
|
|
|
|
|
return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
TreeNode root = new TreeNode(preorder[0]); |
|
|
|
|
|
|
|
int length = preorder.length; |
|
|
|
|
|
|
|
Stack<TreeNode> stack = new Stack<>(); |
|
|
|
|
|
|
|
stack.push(root); |
|
|
|
|
|
|
|
int inorderIndex = 0; |
|
|
|
|
|
|
|
for (int i = 1; i < length; i++) { |
|
|
|
|
|
|
|
int preorderVal = preorder[i]; |
|
|
|
|
|
|
|
TreeNode node = stack.peek(); |
|
|
|
|
|
|
|
if (node.val != inorder[inorderIndex]) { |
|
|
|
|
|
|
|
node.left = new TreeNode(preorderVal); |
|
|
|
|
|
|
|
stack.push(node.left); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
while (!stack.isEmpty() && stack.peek().val == inorder[inorderIndex]) { |
|
|
|
|
|
|
|
node = stack.pop(); |
|
|
|
|
|
|
|
inorderIndex++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
node.right = new TreeNode(preorderVal); |
|
|
|
|
|
|
|
stack.push(node.right); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return root; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|