驗證二叉樹的前序序列化(入度和出度)

2021-10-21 21:13:24 字數 1291 閱讀 4442

驗證二叉樹的前序序列化

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

_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

補充一下二叉樹中度的概念:某一結點其子結點的個數

思路:利用二叉樹葉子結點對於的度為0,計算先序遍歷時,二叉樹的度的變化,對於數字,其度數加2(因為有兩個孩子結點),同時減1(減去自身),計算度的變化

葉子結點的總和要比其他結點數之和要多一(見下圖),所以度的總和不可比初始值少2.

。1.字串分隔割,出去逗號,減少字元討論次數

string[

] tree=preorder.

split

(","

);

2 . 處理特殊條件

if

(tree[0]

.equals

("#"

)&&tree.length==1)

class

solution

while

(i!tree[i]

.equals

("#"))

i++;}

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