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.

一刷
題解:
具體的思路是,利用棧,實(shí)現(xiàn)preorder traversal。具體的措施是,壓棧root, left, 如果是right,則彈出對(duì)應(yīng)的left和root
Time complexity O(n), space complexity O(logn)

public class Solution {
    public boolean verifyPreorder(int[] preorder) {
        int low = Integer.MIN_VALUE;
        Stack<Integer> stack = new Stack<>();
        for(int i : preorder){
            if(i<low) return false;
            while(!stack.isEmpty() && i>stack.peek()) low = stack.pop();
            stack.push(i);
        }
        
        return true;
    }
}

不使用Stack,Space Complexity O(1)的解法, 利用了原數(shù)組

public class Solution {
    public boolean verifyPreorder(int[] preorder) {
        int low = Integer.MIN_VALUE, index = -1;
        for(int i : preorder){
            if(i<low) return false;
            while(index>=0 && i>preorder[index]) low = preorder[index--];
            preorder[++index] = i;
        }
        return true;
    }
}

二刷
還是忘記了。不用遞歸,perorder, inorder, postorder都要用棧實(shí)現(xiàn)。
Stack

public class Solution {
    public boolean verifyPreorder(int[] preorder) {
        int low = Integer.MIN_VALUE;
        Stack<Integer> stack = new Stack<>();
        for(int i:preorder){
            if(i<low) return false;
            while(!stack.isEmpty() && i>stack.peek()) low = stack.pop();
            stack.push(i);
        }
        return true;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容