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.

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

class Solution {
    public boolean verifyPreorder(int[] preorder) {
        return helper(preorder, 0, preorder.length - 1);
    }

    private boolean helper(int[] preorder, int start, int end){
        if (start > end) return true;

        int root = preorder[start], i = start + 1;
        for (; i <= end; i++){
            if (root < preorder[i]) break;
        }

        for (int j = i; j <= end; j++){
            if (root > preorder[j]) return false;
        }

        return helper(preorder, start + 1, i - 1) && helper(preorder, i, end);
    }
}
class Solution {
    int index = 0;
    public boolean verifyPreorder(int[] preorder) {
        if (preorder == null || preorder.length <= 2) return true;

        return dfs(preorder, Integer.MIN_VALUE, Integer.MAX_VALUE);
    }

    private boolean dfs(int[] preorder, int min, int max){
        if (index >= preorder.length || preorder[index] > max) return true;

        int root = preorder[index++];
        if (root < min) return false;

        return dfs(preorder, min, root) && dfs(preorder, root, max);
    }
}

results for ""

    No results matching ""