劍指 71 序列化二叉樹

2021-10-04 04:49:34 字數 1293 閱讀 4642

題目描述

請實現兩個函式,分別用來序列化和反序列化二叉樹

二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點(#),以 ! 表示乙個結點值的結束(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 序列化二叉樹

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