【Day18 中高難度算法挑戰(zhàn)】二叉樹的序列化和反序列化
介紹
總而言之是時(shí)候利用暑假鍛煉一下算法技術(shù),一提算法面試就面露難色的情形總不能一直持續(xù)下去。本欄目面向有一定基礎(chǔ)的編程愛好者,每天(如果up不鴿)分享并解析一道LeetCode中高難度題目(通常是hard)。有興趣的小伙伴可以一起跟著做并且討論解法。目前的教材是花花醬的Leetcode Problem List【1】.
適合人群:
有一定算法基礎(chǔ),但是還未能順利通過筆試/面試,總覺得算法題目想不明白的你。
不適合人群:
算法入門級選手(一上來就做難題可能并不合適,建議首先專注簡單/中等題目)
非常不適合人群:
算法競賽選手(這種小兒科的問題完全是在浪費(fèi)您的時(shí)間)
過往題目在這里!

二叉樹的序列化和反序列化
題目看這里,lintcode第7題,middle難度:
https://www.lintcode.com/problem/7/description/
強(qiáng)烈建議讀者自己先做(不過真的會有讀者嗎,笑),有任何問題歡迎在評論區(qū)討論,up看到了會及時(shí)回復(fù)。做完了歡迎在評論區(qū)打卡~
解析
本題如果做不出來看答案的話,初看很簡單,但是實(shí)際上有些東西不想明白下次遇到還是不會,這里細(xì)節(jié)很多。這里序列化的時(shí)候我們層序遍歷,當(dāng)子節(jié)點(diǎn)存在的時(shí)候當(dāng)然一切好說,但是左/右子節(jié)點(diǎn)不存在的話就不要把它加入隊(duì)列,而為了之后反序列,這里要把‘#’加入結(jié)果。
反序列化時(shí)先把所有節(jié)點(diǎn)創(chuàng)建出來,然后再根據(jù)序列化時(shí)的順序逐一連接。連接時(shí)我們用了快慢指針的方法,這里可以看做是把層序遍歷的順序再來一遍。

思考樂園
反序列化時(shí)快慢指針為什么work?為什么這里單憑一維數(shù)組就可以存儲樹?歡迎將答案寫在評論區(qū)~
音樂推薦
ttup居然畢業(yè)了,令人震驚。不過vtuber這個(gè)行業(yè)難做也是有目共睹......順便來說,我也快要畢業(yè),但是不論哪的就業(yè)市場都很糟糕,還沒有secure一個(gè)工作,簡歷拒也太離譜了,令人非常不安。來自法里達(dá)的摩登愛情,送給對未來感到迷茫的你。
教材鏈接
【1】https://zxi.mytechroad.com/blog/leetcode-problem-categories/