題目描述:請實現兩個函式,分別用來序列化和反序列化二叉樹.
二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點(#),以 , 表示乙個結點值的結束(value!)。
二叉樹的反序列化是指:根據某種遍歷順序得到的序列化字串結果str,重構二叉樹。
分析:
根據前序遍歷的順序來進行序列化,前序遍歷是從根結點開始,在遍歷二叉樹碰到null指標時,就將其序列化為乙個特殊字元,比如#,另外,結點的數值之間用乙個特殊字元(比如,)進行分隔。比如對於以下的樹,序列化為字串:"1,2,4,#,#,#,3,5,#,#,6,#,#,"。
下面的實現時間效率不高,如果節點過多,會出現超時現象。可以考慮將split方法單獨拿出來不進行重複執行,提高演算法的效率。
**實現:
public string serialize(treenode root)
return sb.tostring();
}public int index = -1;
public treenode deserialize(string str)
return node;
}
JZ62 序列化二叉樹
題目描述 給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如,5,3,7,2,4,6,8 中,按結點數值大小順序第三小結點的值為4。題解 根據二叉樹的特性,可知中序遍歷搜尋二叉樹得到的序列是有序的。可以利用此特性來解決這個問題。解法一 遞迴 public class solution help ro...
面試題62 序列化二叉樹
題目 請實現兩個函式,分別用來序列化和反序列化二叉樹。參考 序列化指的是將一棵二叉樹儲存到檔案中,反序列化就是從檔案中讀取二叉樹結點值重構原來的二叉樹。struct btnode 序列化 void serialize btnode root,ostream out 將結點的值寫入 outserial...
二叉樹25 序列化二叉樹
題目 請實現兩個函式,分別用來序列化和反序列化二叉樹 思路 前面tree4已經研究過了二叉樹的序列化和反序列化問題,對於序列化和反序列化,預設就是使用先序遍歷來進行的,且無論是空節點還是非空的結點都需要進行遍歷,對於空節點通常標記位 每個結點值的結束使用 來進行,oj一般不使用 public cla...