<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?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
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草视频大香蕉 | 大香蕉在线视频网站 | 免费插插视频 | 国产精品高潮呻吟久久 | 日逼网站123 |