可以用遞迴,比如前序遍歷,注意,因為在序列化的時候,當某節點為null,做有標記,因此,在反序列化的時候,可以仍然前序遞迴,但此時,字串流的狀態要隨之更新。
1,2,4,#,#,#,3,5,#,#,6,#,#
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
codec
// decodes your encoded data to tree.
treenode*
deserialize
(string data)
treenode*
sovle
(istringstream& ans)};
// your codec object will be instantiated and called as such:
// codec codec;
// codec.deserialize(codec.serialize(root));
序列化的方法並非一定要前序,層序也可以,此時用到bfs和佇列。
在序列化的過程中,判斷一下當前是否為空,空的化就不進行push操作,不空push左右子樹。
反序列化的過程依然用到了 流的特點,即根據空格分離,依次讀入,並建隊建樹
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
codec
else
}return ans;
}// decodes your encoded data to tree.
treenode*
deserialize
(string data)
ss>>tmp;
if(tmp==
"#")node-
>right =
null
;else
}return node;}}
;// your codec object will be instantiated and called as such:
// codec codec;
// codec.deserialize(codec.serialize(root));
序列化 反序列化二叉樹
設計乙個演算法能夠實現序列化和反序列化一棵二叉樹 注意,不是二叉搜尋樹bst 這裡的序列化指的是將一棵二叉樹儲存到檔案中,反序列化就是從檔案中讀取二叉樹結點值重構原來的二叉樹。前一篇文章儲存二叉搜尋樹到檔案中 解決了儲存一棵二叉搜尋樹到檔案中的問題,但是由於本題目的意思是要把一棵二叉樹儲存到檔案中並...
序列化和反序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹。基本思想很簡單,序列化就是用某一種遍歷方法將二叉樹元素儲存在字串陣列中,當然要乙個個元素分離,分得清誰是誰。反序列化就是把儲存在字串陣列中的元素進行重構,使之成為二叉樹。我們不妨選擇前序遍歷的思想進行搜尋與重構。本題的關鍵是如何對元素進行儲存,可以放在...
序列化和反序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點 以 表示...