多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 序列化二叉樹

序列化二叉樹

來源:程序員人生   發布時間:2016-07-04 16:15:12 閱讀次數:2425次

題目

請實現兩個函數,分別用來序列化和反序列化2叉樹

解題

甚么是序列化?
可以理解為1直存儲結構
序列化后還要可以反序列化
對樹的序列號,可以理解為層次遍歷,但是也要記錄其中的空結點,這是為了能夠回去

我們知道可以從前序遍歷和中序遍歷構造出1棵2叉樹。受此啟發,我們可以先把1棵2叉樹序列化成1個前序遍歷序列和1個中序序列,然后再反序列化時通過這兩個序列重構出原2叉樹。

這個思路有兩個缺點。1個缺點是該方法要求2叉樹中不能用有數值重復的結點。另外只有當兩個序列中所有數據都讀出后才能開始反序列化。如果兩個遍歷序列的數據是從1個流里讀出來的,那便可能需要等較長的時間。

實際上如果2叉樹的序列化是從根結點開始的話,那末相應的反序列化在根結點的數值讀出來的時候就能夠開始了。因此我們可以根據前序遍歷的順序來序列化2叉樹,由于前序遍歷是從根結點開始的。當在遍歷2叉樹碰到 NULL 指針時,這些 NULL 指針序列化成1個特殊的字符(比如‘#’)。另外,結點的數值之間要用1個特殊字符(比如’,’)隔開。

public class Solution { String Serialize(TreeNode root) { if(root == null) return ""; StringBuilder sb = new StringBuilder(); Serialize(root, sb); return sb.toString(); } void Serialize(TreeNode root, StringBuilder sb) { if(root == null) { sb.append("#,"); return; } sb.append(root.val); sb.append(','); Serialize(root.left, sb); Serialize(root.right, sb); } int index = -1; TreeNode Deserialize(String str) { if(str.length() == 0) return null; String[] strs = str.split(","); return Deserialize(strs); } TreeNode Deserialize(String[] strs) { index++; if(!strs[index].equals("#")) { TreeNode root = new TreeNode(0); root.val = Integer.parseInt(strs[index]); root.left = Deserialize(strs); root.right = Deserialize(strs); return root; } return null; } }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 69xx免费观看视频 | 男女爽爽无遮挡午夜视频在线观看 | 亚洲欧美日韩精品久久亚洲区 | 日韩va| 久久亚洲国产视频 | 日韩精品一区二三区中文 | 欧美性猛交 | 亚洲成人黄色网址 | 国产在线视频一区二区三区 | 国产v国产v片大片线观看网站 | 国产女人体一区二区三区 | 精品伊人网| 国产三级在线观看播放 | 亚洲视频一区二区 | 国产成人精选视频69堂 | 中文字幕a∨在线乱码免费看 | 亚洲综合福利 | 黑人网址| 2020国产v亚洲v天堂高清 | 91色资源网在线观看 | 高清视频 一区二区三区四区 | 欧美另类xxx | 午夜影院在线观看免费 | 中文字幕视频在线免费观看 | 国产乱辈通伦影片在线播放亚洲 | 中文字幕第一区 | 九一精品| 亚洲成人福利 | 国产精品久久久久久免费 | 国产午夜精品久久久久 | japanese国产高清麻豆 | 日本午夜三级 | 欧美第一色 | 99毛片| 亚洲精彩视频在线观看 | 永久免费看片 | 欧美一级在线 | 久久精品久久精品国产大片 | 午夜老司机免费视频 | 在线免费观看a级片 | 在线观看日本一区 |