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

2021-10-22 22:15:47 字數 949 閱讀 9120

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

_9_

/ \

3 2

/ \ / \

4 1 # 6

/ \ / \ / \

# # # # # #

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

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

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

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

示例

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

輸出: true

從序列出開始遍歷,若遇到』#『則表示該位置已到達葉子結點,若此時棧頂元素也為』#』,表示當前葉子結點的前乙個節點就是該葉子節點的父節點,彈出此時的棧頂元素與其父節點,重新加入』#』,表示這一子樹正確已結束判斷

不斷的進行這樣的操作,最終根節點的左右節點都會被替換為』#』,最後棧中若只剩下乙個』#'表示所有的子樹都正確,故該前序序列化正確,否則錯誤

參考代

class

solution

} stack.

push

(strs[i]);

}return stack.

size()

==1&& stack.

peek()

.equals

("#")?

true

:false;}

}

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,4,1,2,6,其中 代表乙個空節點。給定一串以逗號分隔的序列,驗證它是否是正確的二叉樹的前序序列化。編寫乙...