劍指offer 37 序列化二叉樹 C

2021-10-23 07:37:15 字數 1377 閱讀 2237

題目描述

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

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

二叉樹的反序列化是指:根據某種遍歷順序得到的序列化字串結果str,重構二叉樹。

例如,我們可以把乙個只有根節點為1的二叉樹序列化為"1,",然後通過自己的函式來解析回這個二叉樹。

思路:前序遍歷序列化二叉樹,再反序列化。

無腦的在這題上耗了很久,≡(▔﹏▔)≡

class

solution

void

dfs1

(treenode* root, string& ss)

ss +

=to_string

(root-

>val)

+","

;dfs1

(root-

>left, ss)

;//分別遍歷左、右子樹

dfs1

(root-

>right, ss);}

//反序列化——傳入一顆字元陣列,構建二叉樹

treenode*

deserialize

(char

*str)

treenode*

dfs2

(char

* str,

int& idx)

//非空節點,計算數值

int num =0;

int sign =1;

//考慮符號+-

if(idx < len && str[idx]

=='-'

)for

(int i = idx; i < len; i++

) num = num *

10+ str[i]

-'0'

;// 『234』 len=3,str[idx]=2

num *

= sign;

//idx走到下乙個節點元素

idx = len +1;

//構建二叉樹

auto root =

newtreenode

(num)

; root-

>left =

dfs2

(str, idx)

; root-

>right =

dfs2

(str, idx)

;return root;}}

;

劍指Offer 37 序列化二叉樹

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

劍指offer37 序列化二叉樹

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

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

請實現兩個函式,分別用來序列化和反序列化二叉樹。示例 你可以將以下二叉樹 1 2 3 4 5 序列化為 1,2,3,null,null,4,5 層序遍歷,使用乙個佇列輔助queue 的 push pop front to string複雜度 o時間複雜度 o n 空間複雜度 o n definiti...