255. Verify Preorder Sequence in Binary Search Tree
use recursion
preorder, so root left right, right must be larger than root, or it's false
T: O(nlogn), logn is the tree height
S: O(nlogn)
class Solution {
public boolean verifyPreorder(int[] preorder) {
return dfs(preorder, 0, preorder.length - 1);
}
private boolean dfs(int[] preorder, int start, int end) {
if (start > end) {
return true;
}
int root = preorder[start];
int i = start + 1;
while (i <= end && preorder[i] < root) {
i++;
}
for (int right = i; right <= end; right++) {
if (root > preorder[right]) {
return false;
}
}
return dfs(preorder, start + 1, i-1) && dfs(preorder, i, end);
}
}
/*
use recursion
T: O(nlogn)
S: O(nlogn)
*/
2. use mono stack
T: O(n)
S: O(n)
Previous316. Remove Duplicate Letters, 1081. Smallest Subsequence of Distinct CharactersNext735. Asteroid Collision
Last updated
Was this helpful?