1. ?LeetCode刷題實戰(zhàn)331:驗證二叉樹的前序序列化

        共 4388字,需瀏覽 9分鐘

         ·

        2021-07-27 01:03

        算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

        今天和大家聊的問題叫做 驗證二叉樹的前序序列化,我們先來看題面:
        https://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree/

        示例

        示例 1:

        輸入: "9,3,4,#,#,1,#,#,2,#,6,#,#"
        輸出: true

        示例 2:

        輸入: "1,#"
        輸出: false

        示例 3:

        輸入: "9,#,#,1"
        輸出: false


        解題


        方法一:棧

        我們可以定義一個概念,叫做槽位。一個槽位可以被看作「當(dāng)前二叉樹中正在等待被節(jié)點填充」的那些位置。

        二叉樹的建立也伴隨著槽位數(shù)量的變化。每當(dāng)遇到一個節(jié)點時:

        如果遇到了空節(jié)點,則要消耗一個槽位;

        如果遇到了非空節(jié)點,則除了消耗一個槽位外,還要再補充兩個槽位。

        此外,還需要將根節(jié)點作為特殊情況處理。


        我們使用棧來維護(hù)槽位的變化。棧中的每個元素,代表了對應(yīng)節(jié)點處剩余槽位的數(shù)量,而棧頂元素就對應(yīng)著下一步可用的槽位數(shù)量。當(dāng)遇到空節(jié)點時,僅將棧頂元素減 1;當(dāng)遇到非空節(jié)點時,將棧頂元素減 1 后,再向棧中壓入一個 2。無論何時,如果棧頂元素變?yōu)?0,就立刻將棧頂彈出。

        遍歷結(jié)束后,若棧為空,說明沒有待填充的槽位,因此是一個合法序列;否則若棧不為空,則序列不合法。此外,在遍歷的過程中,若槽位數(shù)量不足,則序列不合法。

        class Solution {
            public boolean isValidSerialization(String preorder) {
                int n = preorder.length();
                int i = 0;
                Deque<Integer> stack = new LinkedList<Integer>();
                stack.push(1);
                while (i < n) {
                    if (stack.isEmpty()) {
                        return false;
                    }
                    if (preorder.charAt(i) == ',') {
                        i++;
                    } else if (preorder.charAt(i) == '#'){
                        int top = stack.pop() - 1;
                        if (top > 0) {
                            stack.push(top);
                        }
                        i++;
                    } else {
                        // 讀一個數(shù)字
                        while (i < n && preorder.charAt(i) != ',') {
                            i++;
                        }
                        int top = stack.pop() - 1;
                        if (top > 0) {
                            stack.push(top);
                        }
                        stack.push(2);
                    }
                }
                return stack.isEmpty();
            }
        }

        作者:LeetCode-Solution
        鏈接:https://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree/solution/yan-zheng-er-cha-shu-de-qian-xu-xu-lie-h-jghn/
        來源:力扣(LeetCode)
        著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

        好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力 。

        上期推文:

        LeetCode1-320題匯總,希望對你有點幫助!

        LeetCode刷題實戰(zhàn)321:拼接最大數(shù)

        LeetCode刷題實戰(zhàn)322:零錢兌換

        LeetCode刷題實戰(zhàn)323:無向圖中連通分量的數(shù)目

        LeetCode刷題實戰(zhàn)324:擺動排序 II

        LeetCode刷題實戰(zhàn)325:和等于 k 的最長子數(shù)組長度

        LeetCode刷題實戰(zhàn)326:3的冪
        LeetCode刷題實戰(zhàn)327:區(qū)間和的個數(shù)
        LeetCode刷題實戰(zhàn)328:奇偶鏈表
        LeetCode刷題實戰(zhàn)329:矩陣中的最長遞增路徑
        LeetCode刷題實戰(zhàn)330:按要求補齊數(shù)組

        瀏覽 28
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 台湾黄三级高清在线观看播放 | 色国产一区 | 99精品成人在线视频 | 小乔脱了内裤打开腿让人摸 | 久久精品性爱视频 |