331 驗證二叉樹的前序序列化

2021-10-21 20:15:59 字數 1172 閱讀 9065

序列化二叉樹的一種方法是使用前序遍歷。當我們遇到乙個非空節點時,我們可以記錄下這個節點的值。如果它是乙個空節點,我們可以使用乙個標記值記錄,例如 #。

例如,上面的二叉樹可以被序列化為字串 「9,3,4,#,#,1,#,#,2,#,6,#,#」,其中 # 代表乙個空節點。

給定一串以逗號分隔的序列,驗證它是否是正確的二叉樹的前序序列化。編寫乙個在不重構樹的條件下的可行演算法。

每個以逗號分隔的字元或為乙個整數或為乙個表示 null 指標的 『#』 。

你可以認為輸入格式總是有效的,例如它永遠不會包含兩個連續的逗號,比如 「1,3」 。

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

輸出: true

輸入: "1,#"

輸出: false

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

輸出: false

棧,樹

根據『#』遍歷,遇到『#』,層數減一,數字加一,返回最後結果是否遍歷完全,即最後的層數是否等於0.

class

solution

:def

isvalidserialization

(self, preorder:

str)

->

bool

: n =

1#初始化樹的層數

preorder = preorder.split(

',')

for i in preorder:

if n ==0:

return

false

if i ==

'#':

#遍歷到空節點,返回到上一層

n -=

1if n <0:

return

false

#如果層數小於0,返回false

else

: n +=

1#非空節點,繼續向下遍歷,層數+1

return n ==

0

331 驗證二叉樹的前序序列化

序列化二叉樹的一種方法是使用前序遍歷。當我們遇到乙個非空節點時,我們可以記錄下這個節點的值。如果它是乙個空節點,我們可以使用乙個標記值記錄,例如 9 3 2 4 1 6 例如,上面的二叉樹可以被序列化為字串 9,3,4,1,2,6,其中 代表乙個空節點。給定一串以逗號分隔的序列,驗證它是否是正確的二...

331 驗證二叉樹的前序序列化

序列化二叉樹的一種方法是使用前序遍歷。當我們遇到乙個非空節點時,我們可以記錄下這個節點的值。如果它是乙個空節點,我們可以使用乙個標記值記錄,例如 9 3 2 4 1 6 例如,上面的二叉樹可以被序列化為字串 9,3,4,1,2,6,其中 代表乙個空節點。給定一串以逗號分隔的序列,驗證它是否是正確的二...

331 驗證二叉樹的前序序列化

題目 題目分析 首先,前序遍歷的特點是,以題目示例為例 假設我們從根節點9出發,前序遍歷的第乙個節點是3,這時候,所有的操作都是基於3來執行的,除非3被更深的節點 4或1 覆蓋 就如同3覆蓋根節點9一般 或者3前序遍歷結束,回到了根節點9.這麼一分析,這似乎就是棧結構嘛 假設我們將每個節點都設定乙個...