【題目】
傳送門【思路】
序列化:
二叉樹的序列化本質上是對其值進行編碼,更重要的是對其結構進行編碼。可以遍歷樹來完成上述任務。反序列化:我們可以先序遍歷這顆二叉樹,遇到空子樹的時候序列化成 none,否則繼續遞迴序列化。
首先我們需要根據 , 把原先的序列分割開來得到先序遍歷的元素列表,然後從左向右遍歷這個序列:
如果當前的元素為 none,則當前為空樹
否則先解析這棵樹的左子樹,再解析它的右子樹
【bfs非遞迴解法】
class
codec
else}}
return res;
}// decodes your encoded data to tree.
treenode*
deserialize
(string data)
else
while
(!que.
empty()
)if(getline
(s,str_right,
',')
&& str_right!=
"nullptr")}
}}return root;}}
;
【遞迴解法】
class
codec
// 前序遍歷序列轉化為字串
void
dfs_s
(treenode* root, string& res)
res +
=to_string
(root-
>val)
+' '
;dfs_s
(root-
>left, res)
;dfs_s
(root-
>right, res);}
// decodes your encoded data to tree.
treenode*
deserialize
(string data)
treenode*
dfs_d
(string& data,
int& u)
int val =
0, sign =1;
if(data[u]
=='-'
) sign =-1
, u ++
;//標記負數的符號位
while
(data[u]
!=' '
) val *
= sign;
u = u +1;
auto root =
newtreenode
(val)
;//建立節點
root-
>left =
dfs_d
(data, u)
; root-
>right =
dfs_d
(data, u)
;return root;}}
;// your codec object will be instantiated and called as such:
// codec codec;
// codec.deserialize(codec.serialize(root));
力扣日記 297 二叉樹的序列化與反序列化
序列化是將乙個資料結構或者物件轉換為連續的位元位的操作,進而可以將轉換後的資料儲存在乙個檔案或者記憶體中,同時也可以通過網路傳輸到另乙個計算機環境,採取相反方式重構得到原資料。請設計乙個演算法來實現二叉樹的序列化與反序列化。這裡不限定你的序列 反序列化演算法執行邏輯,你只需要保證乙個二叉樹可以被序列...
297 二叉樹的序列化與反序列化
題目 序列化是將乙個資料結構或者物件轉換為連續的位元位的操作,進而可以將轉換後的資料儲存在乙個檔案或者記憶體中,同時也可以通過網路傳輸到另乙個計算機環境,採取相反方式重構得到原資料。請設計乙個演算法來實現二叉樹的序列化與反序列化。這裡不限定你的序列 反序列化演算法執行邏輯,你只需要保證乙個二叉樹可以...
297 二叉樹的序列化與反序列化
序列化是將乙個資料結構或者物件轉換為連續的位元位的操作,進而可以將轉換後的資料儲存在乙個檔案或者記憶體中,同時也可以通過網路傳輸到另乙個計算機環境,採取相反方式重構得到原資料。請設計乙個演算法來實現二叉樹的序列化與反序列化。這裡不限定你的序列 反序列化演算法執行邏輯,你只需要保證乙個二叉樹可以被序列...