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)

Last updated

Was this helpful?