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

2021-09-26 23:24:21 字數 1437 閱讀 7858

設計乙個演算法,並編寫**來序列化和反序列化二叉樹。將樹寫入乙個檔案被稱為「序列化」,讀取檔案後重建同樣的二叉樹被稱為「反序列化」。

如何反序列化或序列化二叉樹是沒有限制的,你只需要確保可以將二叉樹序列化為乙個字串,並且可以將字串反序列化為原來的樹結構。

樣例 1:

輸入:

輸出:解釋:

二叉樹 ,表示如下的樹結構:

3/ \

9 20

/ \

15 7

它將被序列化為

樣例 2:

輸入:

輸出:解釋:

二叉樹 ,表示如下的樹結構:

1/ \

2 3

它將被序列化為

我們的資料是進行 bfs 遍歷得到的。當你測試結果 wrong answer 時,你可以作為輸入除錯你的**。

你可以採用其他的方法進行序列化和反序列化。

對二進位制樹進行反序列化或序列化的方式沒有限制,lintcode 將您的serialize輸出作為deserialize的輸入,它不會檢查序列化的結果。

輸入測試資料 (每行乙個引數)如何理解測試資料?

/**

* definition of treenode:

* class treenode

* }*/class solution

// cout << endl;

return nums;

}void bianli(treenode * root)

else

}/**

* this method will be invoked second, the argument data is what exactly

* you serialized at method "serialize", that means the data is not given by

* system, it's given by your own serialize method. so the format of data is

* designed by yourself, and deserialize it here as you serialize it in

* "serialize" method.

*/treenode * deserialize(string &data)

treenode* creat(string &nums, int& index)

else

return null;

if(ch == 35)

else

return root;

}};

序列化 反序列化二叉樹

設計乙個演算法能夠實現序列化和反序列化一棵二叉樹 注意,不是二叉搜尋樹bst 這裡的序列化指的是將一棵二叉樹儲存到檔案中,反序列化就是從檔案中讀取二叉樹結點值重構原來的二叉樹。前一篇文章儲存二叉搜尋樹到檔案中 解決了儲存一棵二叉搜尋樹到檔案中的問題,但是由於本題目的意思是要把一棵二叉樹儲存到檔案中並...

序列化和反序列化二叉樹

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

序列化和反序列化二叉樹

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