請實現兩個函式,分別用來序列化和反序列化二叉樹
將問題分解為左子樹、根節點、右子樹分別進行遞迴處理。
序列化是從根開始的,那麼對應的反序列化在根節點的先序遍歷中就可以得到。用』#'表示遍歷過程中的nullptr,通過先序遍歷得到序列。
如:0,1,3,###2,4,##5,##
反序列化:
如上式,首先得到數字0,作為根節點;然後得到數字1,是根節點的左子節點,接著得到3,是1的左子節點;接著得到兩個』#『,說明3為葉子結點,左右孩子都是空。然後得到』#』,說明1的右子節點為空;接著得到2,說明0的右子節點為2;以此類推。
/*
struct treenode
};*/
class
solution
string s =
to_string
(root-
>val)
; s.
push_back
(',');
char
*left =
serialize
(root-
>left)
;char
*right =
serialize
(root-
>right)
;char
*ret =
newchar
[strlen
(left)
+strlen
(right)
+ s.
size()
];strcpy
(ret,s.
c_str()
);strcat
(ret,left)
;strcat
(ret,right)
;return ret;
}// 注意引數型別應該為char *&str
treenode*
deserialize
(char
*&str)
int num =0;
while
(*str!=
',')
str ++
;// 跳過','
treenode *root =
newtreenode
(num)
; root-
>left =
deserialize
(str)
; root-
>right =
deserialize
(str)
;return root;}}
;
劍指offer 二叉樹 序列化二叉樹
題目描述 請實現兩個函式,分別用來序列化和反序列化二叉樹 解題思路 1,序列化和反序列化都可以通過前序遍歷 根左右 來進行 2,序列化遇到null用 來標明 3,反序列化的時候遇到 則停止 package 二叉樹 title 請實現兩個函式,分別用來序列化和反序列化二叉樹 public class ...
劍指offer 序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹。首先得理解題目的意思,序列化就是返回乙個帶有 和逗號的字串。反序列化就是根據帶有 和逗號的字串返回一棵二叉樹。比如對於二叉樹 1 2 3 4 5 6 7來講,序列化的結果是1,2,3,4,7,5,而反序列化的結果則是輸出一棵二叉樹。public cla...
劍指Offer 序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 根據前面的面試題重建二叉樹,我們知道可以從前序遍歷和中序遍歷構造出一棵二叉樹。受此啟發,我們可以先把一棵二叉樹序列化成乙個前序遍歷序列和乙個中序序列的結合,然後再反序列化時通過這兩個序列重構出原二叉樹。但是這個思路有兩個缺點。乙個缺點是該方法要求二叉樹...