目錄
一、題目內容
二、解題思路
三、**
序列化二叉樹的一種方法是使用前序遍歷。當我們遇到乙個非空節點時,我們可以記錄下這個節點的值。如果它是乙個空節點,我們可以使用乙個標記值記錄,例如 #。
_9_/ \
3 2
/ \ / \
4 1 # 6
/ \ / \ / \
# # # # # #
例如,上面的二叉樹可以被序列化為字串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表乙個空節點。
給定一串以逗號分隔的序列,驗證它是否是正確的二叉樹的前序序列化。編寫乙個在不重構樹的條件下的可行演算法。
每個以逗號分隔的字元或為乙個整數或為乙個表示 null 指標的 '#' 。
你可以認為輸入格式總是有效的,例如它永遠不會包含兩個連續的逗號,比如 "1,,3" 。
示例 1:輸入: "9,3,4,#,#,1,#,#,2,#,6,#,#"
輸出: true
示例 2:輸入: "1,#"
輸出: false
示例 3:用棧儲存數字,『#』作為出棧的依據;輸入: "9,#,#,1"
輸出: false
事先棧中存入乙個『#』;
當棧中最後乙個是『#』且preorder序列最後也是『#』,則說明是正確的二叉樹的前序序列化;
否則若preorder中『#』還沒有到最後位置就與棧中的『#』匹配,則說明是不正確的。
class solution:
def isvalidserialization(self, preorder: str) -> bool:
stack = ['#']
i = 0
while i < len(preorder):
if preorder[i] == ',':
i += 1
continue
elif preorder[i] == '#':
if stack[-1] == '#':
if i == len(preorder) - 1:
stack.pop()
else:
return false
else:
stack.pop()
elif preorder[i] != '#':
while i < len(preorder) and preorder[i] != ',':
i += 1
i += 1
return len(stack) == 0
if __name__ == '__main__':
s = solution()
preorder = "9,3,4,#,#,1,#,#,2,#,6,#,#"
ans = s.isvalidserialization(preorder)
print(ans)
leetcode 331驗證二叉樹前序序列化(棧)
difficulty 中等 序列化二叉樹的一種方法是使用前序遍歷。當我們遇到乙個非空節點時,我們可以記錄下這個節點的值。如果它是乙個空節點,我們可以使用乙個標記值記錄,例如 9 3 2 4 1 6 例如,上面的二叉樹可以被序列化為字串 9,3,4,1,2,6,其中 代表乙個空節點。給定一串以逗號分隔...
Leetcode 331 驗證二叉樹的前序序列化
人千萬不能有惰性,兩天沒寫題解,就不是很想補之前的題解了,但是今天必須糾正這個事情,要開始補題解了。序列化二叉樹的一種方法是使用前序遍歷。當我們遇到乙個非空節點時,我們可以記錄下這個節點的值。如果它是乙個空節點,我們可以使用乙個標記值記錄,例如 9 3 2 4 1 6 例如,上面的二叉樹可以被序列化...
leetcode 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3輸出 true 示例 2 輸入 5 1 4 3 6輸出 false解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 需要注意的是,左 右子樹 是指...