0007 二叉樹的序列化和反序列化問題

2021-09-26 21:11:01 字數 1639 閱讀 9901

問題描述:

如何編寫乙個演算法以實現二叉樹序列化反序列化

將樹寫入乙個檔案被稱為「序列化」。

讀取檔案後重建同樣的二叉樹被稱為「反序列化」。

重點

在執行序列化及反序列化時,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;

}

序列化二叉樹和反序列化二叉樹

題目描述 請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點...

序列化和反序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹。基本思想很簡單,序列化就是用某一種遍歷方法將二叉樹元素儲存在字串陣列中,當然要乙個個元素分離,分得清誰是誰。反序列化就是把儲存在字串陣列中的元素進行重構,使之成為二叉樹。我們不妨選擇前序遍歷的思想進行搜尋與重構。本題的關鍵是如何對元素進行儲存,可以放在...

序列化和反序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點 以 表示...