問題描述:
如何編寫乙個演算法以實現二叉樹的序列化和反序列化?
將樹寫入乙個檔案被稱為「序列化」。
讀取檔案後重建同樣的二叉樹被稱為「反序列化」。
重點:
在執行序列化及反序列化時,node節點為空需要轉化輸出為#
輸入:
輸出:解釋:
二叉樹 ,表示如下的樹結構:
3/ \
9 20
/ \
15 7
它將被序列化為
主要考點:
二叉樹序列化為及反序列化的邏輯演算法
演算法邏輯:
序列化:
判斷獲取的treenode節點是否存在(非空)
獲取並判斷treenode的子節點是否存在
若存在則將正確的節點資料組裝並重複步驟2,下鑽獲取子節點直至子節點為空
若不存在則將#看作佔位符置入序列化字串中返回空並中止當前的子節點下鑽
反序列化:
宣告反序列化變數now = 0(可理解為目前二叉樹的層級,預設從根節點開始向下延展)
將序列化的字串轉化為array陣列
迴圈判斷array陣列中的值是否存在(#為空節點)
若值為#,則返回空並中止當前子節點繼續下鑽。
若值不為#,則例項化treenode並構建對應的二叉樹結構。
重複步驟3,4,5構建treenode子節點,直至沒有下級子節點。
**實現:
public string serialize(treenode root)
private string doserialize(treenode root)
int now;
public treenode deserialize(string data)
private treenode dodeserialize(string array)
treenode root = new treenode(integer.valueof(array[now]));
now++;
root.left = dodeserialize(array);
root.right = dodeserialize(array);
return root;
}
序列化二叉樹和反序列化二叉樹
題目描述 請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點...
序列化和反序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹。基本思想很簡單,序列化就是用某一種遍歷方法將二叉樹元素儲存在字串陣列中,當然要乙個個元素分離,分得清誰是誰。反序列化就是把儲存在字串陣列中的元素進行重構,使之成為二叉樹。我們不妨選擇前序遍歷的思想進行搜尋與重構。本題的關鍵是如何對元素進行儲存,可以放在...
序列化和反序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點 以 表示...