国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

LeetCode 331. Verify Preorder Serialization of a B

張巨偉 / 1229人閱讀

摘要:如果它是一個(gè)空節(jié)點(diǎn),我們可以使用一個(gè)標(biāo)記值記錄,例如。例如,上面的二叉樹(shù)可以被序列化為字符串,其中代表一個(gè)空節(jié)點(diǎn)。每個(gè)以逗號(hào)分隔的字符或?yàn)橐粋€(gè)整數(shù)或?yàn)橐粋€(gè)表示指針的。如果滿(mǎn)足前序遍歷,那么最后棧中有且僅有一個(gè)元素,且是。

Description

One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, we record the node"s value. If it is a null node, we record using a sentinel value such as #.

     _9_
    /   
   3     2
  /    / 
 4   1  #  6
/  /    / 
# # # #   # #

For example, the above binary tree can be serialized to the string "9,3,4,#,#,1,#,#,2,#,6,#,#", where # represents a null node.

Given a string of comma separated values, verify whether it is a correct preorder traversal serialization of a binary tree. Find an algorithm without reconstructing the tree.

Each comma separated value in the string must be either an integer or a character "#" representing null pointer.

You may assume that the input format is always valid, for example it could never contain two consecutive commas such as "1,,3".

Example 1:

Input: "9,3,4,#,#,1,#,#,2,#,6,#,#"
Output: true
Example 2:

Input: "1,#"
Output: false
Example 3:

Input: "9,#,#,1"
Output: false

描述

序列化二叉樹(shù)的一種方法是使用前序遍歷。當(dāng)我們遇到一個(gè)非空節(jié)點(diǎn)時(shí),我們可以記錄下這個(gè)節(jié)點(diǎn)的值。如果它是一個(gè)空節(jié)點(diǎn),我們可以使用一個(gè)標(biāo)記值記錄,例如 #。

     _9_
    /   
   3     2
  /    / 
 4   1  #  6
/  /    / 
# # # #   # #

例如,上面的二叉樹(shù)可以被序列化為字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表一個(gè)空節(jié)點(diǎn)。

給定一串以逗號(hào)分隔的序列,驗(yàn)證它是否是正確的二叉樹(shù)的前序序列化。編寫(xiě)一個(gè)在不重構(gòu)樹(shù)的條件下的可行算法。

每個(gè)以逗號(hào)分隔的字符或?yàn)橐粋€(gè)整數(shù)或?yàn)橐粋€(gè)表示 null 指針的 "#" 。

你可以認(rèn)為輸入格式總是有效的,例如它永遠(yuǎn)不會(huì)包含兩個(gè)連續(xù)的逗號(hào),比如 "1,,3" 。

示例 1:

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

輸入: "1,#"
輸出: false
示例 3:

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

思路

使用棧,如果兩個(gè) # 連續(xù)出現(xiàn),根據(jù)前序遍歷的定義,前面一個(gè)一定是葉子節(jié)點(diǎn),我們將這兩個(gè) # 彈出,然后將葉子節(jié)點(diǎn)重置為 None (即#),如此循環(huán)下去。

如果滿(mǎn)足前序遍歷,那么最后棧中有且僅有一個(gè)元素,且是 # 。

# -*- coding: utf-8 -*-
# @Author:             何睿
# @Create Date:        2019-03-17 09:44:27
# @Last Modified by:   何睿
# @Last Modified time: 2019-03-17 10:03:55


class Solution:
    def isValidSerialization(self, preorder: str) -> bool:
        # stack:用于記錄遍歷到的節(jié)點(diǎn)值
        # count:stack 中剩余的節(jié)點(diǎn)個(gè)數(shù)
        stack, count = [], 0
        for item in preorder.split(","):
            stack.append(item)
            count += 1
            # 如果 stack 中末位兩個(gè)元素是 #,說(shuō)明這兩個(gè)節(jié)點(diǎn)前面是一個(gè)葉子節(jié)點(diǎn)
            # 將兩個(gè) # 彈出 ,將葉子節(jié)點(diǎn)置為 None,即 #
            # 如果是前序遍歷,那么 stack 最后一定會(huì)剩下一個(gè) # 
            while count > 1 and stack[-1] == "#" and stack[-2] == "#":
                stack.pop()
                stack.pop()
                if not stack: return False
                stack[-1] = "#"
                count -= 2
        # 當(dāng)且僅當(dāng) stack 中只剩下一個(gè)元素且為 # 時(shí)返回 True.
        return True if len(stack) == 1 and stack[0] == "#" else False

源代碼文件在 這里 。
?本文首發(fā)于 何睿的博客 ,歡迎轉(zhuǎn)載,轉(zhuǎn)載需保留 文章來(lái)源 ,作者信息和本聲明.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43377.html

相關(guān)文章

  • leetcode331. Verify Preorder Serialization of a Bi

    摘要:如果我們從右往左看先序遍歷,就知道后兩個(gè)節(jié)點(diǎn)如果遇到第三個(gè)節(jié)點(diǎn),則該節(jié)點(diǎn)就應(yīng)當(dāng)是這兩個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)。如果在遍歷的過(guò)程中根節(jié)點(diǎn)數(shù)量小于,則說(shuō)明這棵樹(shù)有問(wèn)題。而如果遍歷結(jié)束之后,剩下的根節(jié)點(diǎn)數(shù)不等于,也說(shuō)明這個(gè)先序遍歷存在問(wèn)題。 題目要求 One way to serialize a binary tree is to use pre-order traversal. When we en...

    weapon 評(píng)論0 收藏0
  • Verify Preorder Serialization of a Binary Tree

    摘要:令,那么從累加會(huì)一直保持正,最后為。從左往右比較好理解,因?yàn)榭偸强偟阶笤俚接遥目偸堑模砸欢ㄊ潜3帧W⒁鈴拈_(kāi)始,因?yàn)闆](méi)有。 Verify Preorder Serialization of a Binary Tree 題目鏈接:https://leetcode.com/problems... recursion,用個(gè)全局的index: public class Solution {...

    melody_lql 評(píng)論0 收藏0
  • leetcode449. Serialize and Deserialize BST

    摘要:題目要求將二叉搜索樹(shù)序列化和反序列化,序列化是指將樹(shù)用字符串的形式表示,反序列化是指將字符串形式的樹(shù)還原成原來(lái)的樣子。假如二叉搜索樹(shù)的節(jié)點(diǎn)較多,該算法將會(huì)占用大量的額外空間。 題目要求 Serialization is the process of converting a data structure or object into a sequence of bits so that...

    Honwhy 評(píng)論0 收藏0
  • [Leetcode] Verify Preorder Sequence in Binary Sear

    摘要:如果繼續(xù)降序,說(shuō)明又向左走了,這樣等到下次向右走得時(shí)候也要再次更新最小值。這樣,序列無(wú)效的條件就是違反了這個(gè)最小值的限定。我們同樣可以用本題的方法解,不過(guò)是從數(shù)組的后面向前面遍歷,因?yàn)樵诤竺媪恕5脑鲩L(zhǎng)方向也是從高向低了。 Verify Preorder Sequence in Binary Search Tree Given an array of numbers, verify ...

    未東興 評(píng)論0 收藏0
  • Serialize and Deserialize Binary Tree & BST

    摘要:思路理論上說(shuō)所有遍歷的方法都可以。但是為了使和的過(guò)程都盡量最簡(jiǎn)單,是不錯(cuò)的選擇。用作為分隔符,來(lái)表示。復(fù)雜度代碼思路這道題和之前不同,一般的樹(shù)變成了,而且要求是。還是可以用,還是需要分隔符,但是就不需要保存了。 297. Serialize and Deserialize Binary Tree Serialization is the process of converting a...

    eccozhou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<