255. 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.

Consider the following binary search tree:

     5
    / \
   2   6
  / \
 1   3

Example 1:

Input: [5,2,6,1,3]
Output: false

Example 2:

Input: [5,2,1,3,6]
Output: true

Follow up: Could you do it using only constant space complexity?

// Stack (simulate preorder traversal)
bool verifyPreorder(vector<int>& preorder) { // time: O(n); space: O(n)
    int low = INT_MIN;
    stack<int> st;
    for (int cur : preorder) {
        if (cur < low) return false;
        while (!st.empty() && cur > st.top()) {
            low = st.top(); st.pop();
        }
        st.push(cur);
    }
    return true;
}

Last updated

Was this helpful?