Verify Preorder Sequence in Binary Search Tree
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary search tree.
You may assume each number in the sequence is unique.
Follow up: Could you do it using only constant space complexity?
Solution
public class Solution {
public boolean verifyPreorder(int[] preorder) {
if (preorder == null || preorder.length <= 1) return true;
return helper(preorder, 0, preorder.length - 1);
}
private boolean helper(int[] preOrder, int left, int right) {
if (left >= right) return true;
else {
int pivot = preOrder[left];
int bigger = -1;
for (int i = left + 1; i <= right; i++) {
if (bigger == -1 && preOrder[i] > pivot) bigger = i;
if (bigger != -1 && preOrder[i] < pivot) return false;
}
if (bigger == -1) {
return helper(preOrder, left + 1, right);
} else {
return helper(preOrder, left + 1, bigger - 1) && helper(preOrder, bigger, right);
}
}
}
}