leetcode 331. 验证二叉树的前序序列化
生活随笔
收集整理的這篇文章主要介紹了
leetcode 331. 验证二叉树的前序序列化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
序列化二叉樹的一種方法是使用前序遍歷。當我們遇到一個非空節點時,我們可以記錄下這個節點的值。如果它是一個空節點,我們可以使用一個標記值記錄,例如 #。_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
解題思路
因為這題連空節點都連出來了,所以只需要統計空節點和正常節點是否能滿足前序遍歷的要求。一個正常節點必須連接兩個子節點(包括#節點),而空節點不能擁有子節點,因此存在關系 父節點(除#以外)后面必須有兩個元素(包括正常節點和#節點,#節點后面不能接子節點
代碼
class Solution {public boolean isValidSerialization(String preorder) {String[] split = preorder.split(",");int i=0,n=split.length,slot=1;while (i<n){if(slot==0) return false;//后面還有節點沒遍歷完,坑位已經被占慢了if(split[i++].equals("#"))slot--;//空節點,坑位被占掉一個,由于沒有子節點,不需要添加坑位else slot++; //坑位被占掉一個,但是因為有兩個子節點,需要多加兩個坑位,所以實際上只加了一個}return slot==0;} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的leetcode 331. 验证二叉树的前序序列化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到小三是什么意思
- 下一篇: leetcode 705. 设计哈希集合