請實現兩個函式,分別用來序列化和反序列化二叉樹
二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點(#),以 ! 表示乙個結點值的結束(value!)。
二叉樹的反序列化是指:根據某種遍歷順序得到的序列化字串結果str,重構二叉樹。
先來個搞笑的解法
深深地膜拜,誰讓人家一眼就把題看透了呢!!
/*
struct treenode
};*/
class
solution
treenode*
deserialize
(char
*str)
};
真槍實練
用了非遞迴的演算法,採用層次遍歷的形式
**中沒有完全按照題目的要求:
上述思想參考:牛課討論
/*
struct treenode
};*/
class
solution
q.push
(p);
int k=0;
while
(!q.
empty()
)if(p->left)
q.push
(p->left)
;else
q.push
(null);
if(p-
>right)
q.push
(p->right)
;else
q.push
(null);
q.pop();
}}res[k++]=
'!';
return
(char
*)res;
} treenode*
deserialize
(char
*str)
else
//判斷是否構建完畢
if(str1[k]
==0x233
)break
;//建立當前節點的右孩子
if(str1[k]
!=0x244
)else
q.pop();
}}return root;}}
;
二刷
第一遍做的時候思路清晰,但是一些小細節的東西都是參考別人的**通過的,在二刷的時候遇到了很多困難,剛開始用先序遍歷非遞迴思想來處理,程式執行的過程中老是出現段錯誤,於是轉戰遞迴形式
下面簡單說下幾個出問題的點:
如何將節點儲存成字元陣列:
首先用to_string方法,將整型轉化成string型別,再利用.to_str轉化成char*型別。儲存完乙個節點後面加個「,」便於區分不同的節點
反序列化時,程式中給左右子樹傳遞的引數都是str對嗎?
對的,在遞迴的過程中str是一直往後移動的,並且傳入的引數是引用型別,使得在程式執行中的改變能夠儲存到最後。
/*
struct treenode
};*/
class
solution
//先將根節點序列化
string s =
to_string
(root-
>val)
; s +
=','
;char
*s_left =
serialize
(root-
>left)
;char
*s_right =
serialize
(root-
>right)
;char
*c_s =
newchar
[s.length()
+strlen
(s_left)
+strlen
(s_right)];
strcpy
(c_s, s.
c_str()
);strcat
(c_s, s_left)
;strcat
(c_s, s_right)
;return c_s;
} treenode*
deserialize
(char
*str)
private
: treenode*
decode
(char
*&str)
int num =0;
while
(*str !=
',')
++str;
treenode *root =
newtreenode
(num)
; root-
>left =
decode
(str)
; root-
>right =
decode
(str)
;return root;}}
;
劍指Offer 37 序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 例 樹 1 2 3 4 5 6 序列化 1,2,4,3,5,6,容易發現序列化其實就是帶none的前序遍歷。所以題目就是完成乙個前序遍歷將節點值存入列表,遍歷列表按前序生成一棵二叉樹。時間複雜度 o n 空間複雜度 o n from datstru i...
《劍指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...
劍指 Offer 37 序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹。示例 你可以將以下二叉樹 1 2 3 4 5序列化為 1,2,3,null,null,4,5 這個題目出的很籠統,沒有任何規定,很是奇怪,在這裡利用了輸入輸出流解題。definition for a binary tree node.struct tr...