請實現兩個函式,分別用來序列化和反序列化二叉樹
首先來解釋一下什麼是序列化和反序列化二叉樹。如下圖所示的二叉樹。
序列化二叉樹就是以先序、中序、後序、層序任意一種遍歷二叉樹的方法將二叉樹遍歷,結點值之間以逗號分隔,空指標以井號代替。以先序序列為例,序列化上圖二叉樹的結果就是[1,2,4,#,#,5,#,#,3,#,#]。
反序列化二叉樹就是給定如上所示的序列,以序列化時的遍歷方法(先序、中序、後序、層序)將序列還原回二叉樹。
程式設計的思路就按定義來實現就好,我這裡用的是先序遍歷。在序列化二叉樹時注意要在最後新增『\0』為序列結束的標識。
/*
struct treenode
};*/
class
solution
str+
=to_string
(root-
>val)
; str+
=','
;preorder
(root-
>left,str)
;preorder
(root-
>right,str);}
char
*serialize
(treenode *root)
res[str.
length()
-1]=
'\0'
;return res;
}void
buildtree
(char
*&str, treenode*
&root)
int temp=0;
while
(*str!=
','&&
*str!=
'\0'
) root=
newtreenode
(temp)
;buildtree
(str,root-
>left)
;buildtree
(str,root-
>right);}
treenode*
deserialize
(char
*str)
};
序列化二叉樹和反序列化二叉樹
題目描述 請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點...
序列化二叉樹
問題 實現兩個函式,序列化乙個二叉樹。如果之前做過乙個題目 用一顆二叉樹的中序和前序還原二叉樹的話,最直觀的解法是用把二叉樹系列化成乙個中序序列和乙個前序序列,但是這個方法的缺陷是每個節點上的值不能相同,而且需要將整個序列都讀入之後才能序列化,如果序列到乙個流中,在從流中讀出來還原二叉樹效率將會比較...
序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 序列化思路 如果二叉樹的序列化是從根節點開始的話,那麼相應的反序列化在根節點的數值對出來的時候就可以開始了,因此我們可以根據前序遍歷的的根節點數值在讀出來的時候就可以開始了,因此我們可以根據前序遍歷的順序來序列化二叉樹,因為前序遍歷是從根節點開始的。當...