《劍指offer》 62 序列化二叉樹

2022-08-30 20:15:13 字數 1113 閱讀 2703

題目:請實現兩個函式,分別來序列化和反序列化二叉樹。

方案分析:我們知道通過二叉樹的中序和任何乙個前或者後續遍歷都可以反序列化一棵二叉樹,但是這樣做有乙個缺點就是,序列化的資料不能有重複的資料,否則會出錯。另外,在反序列化時,需要知道中序和另外的任意一種序列才行,如果兩課二叉樹在字元流裡讀出,且二叉樹的資料比較多,則會相當的耗時。所以,這裡我們採取前序遍歷來完成序列化和反序列化,因為我們都知道用前序遍歷建立過二叉樹。只不過這裡如果一旦遇到null結點,我們需要用其他的字元來代替它。這樣在反序列化時才不會出錯,時間複雜度為o(n)。

具體序列化結果如下:

序列化;

cout

; data[count++]=root->data;

serialize(root->pleft);

serialize(root->pright);

} void deserialize(binarytree *&root)

} void preorder(binarytree *root)

} intmain()

**中null值用0代替,序列化與反序列化的執行結果:

劍指Offer 62 序列化二叉樹

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

62 序列化二叉樹

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

劍指Offer 37 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 例 樹 1 2 3 4 5 6 序列化 1,2,4,3,5,6,容易發現序列化其實就是帶none的前序遍歷。所以題目就是完成乙個前序遍歷將節點值存入列表,遍歷列表按前序生成一棵二叉樹。時間複雜度 o n 空間複雜度 o n from datstru i...