題目描述
請實現兩個函式,分別用來序列化和反序列化二叉樹
二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點(#),以 ! 表示乙個結點值的結束(value!)。
二叉樹的反序列化是指:根據某種遍歷順序得到的序列化字串結果str,重構二叉樹。
**思路:新增乙個輔助陣列來儲存序列化後的數字
首先,序列化,將陣列clear,然後判斷直接進入遍歷環節,如果當前節點wei空,就壓入0xffffffff,然後返回,如果不為空,就壓入陣列,然後遍歷左節點,再右節點。遍歷完後,需要通過乙個快取的方式返回res陣列,因為函式返回型別是char的,所以我們線用int的將輔助陣列的元素壓入區域性變數陣列,然後返回時強制轉換為char
其次,反序列化:
反序列化就是將字串char的轉換成treenode的首節點的。因為我們反序列化是通過判斷數值大小來進行構造樹的,所以我們通過先轉換成int, 呼叫反序列化函式。dsf2,使用的是引用傳參,先判斷為0xffffffff嗎,若是,p++,然後返回空, 否則通過當前節點new乙個節點,做成根節點。然後連線並構造左右節點!(都是用p)原因是在構造完後,會有p++;接著才是構造。
/*
struct treenode
};*/
class
solution
//反序列化
treenode*
deserialize
(char
*str)
private
:vector<
int> buf;
void
dsf1
(treenode* p)
return;}
void
dsf2
(int
*&p)
treenode* res=
newtreenode
(*p)
;//首節點!
p++;//提前加了,為了後面的左右節點坐準備
res-
>left=
dsf2
(p);
//加過的左節點。
res-
>right=
dsf2
(p);
//所以才需要是引用!
return res;}}
;
劍指Offer 37 序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 例 樹 1 2 3 4 5 6 序列化 1,2,4,3,5,6,容易發現序列化其實就是帶none的前序遍歷。所以題目就是完成乙個前序遍歷將節點值存入列表,遍歷列表按前序生成一棵二叉樹。時間複雜度 o n 空間複雜度 o n from datstru i...
劍指offer37 序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點 以 表示...
劍指Offer 62 序列化二叉樹
題目描述 請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點...