力扣 297 二叉樹的序列化與反序列化

2021-10-08 20:56:18 字數 1792 閱讀 5064

【題目】

傳送門【思路】

序列化:

二叉樹的序列化本質上是對其值進行編碼,更重要的是對其結構進行編碼。可以遍歷樹來完成上述任務。

我們可以先序遍歷這顆二叉樹,遇到空子樹的時候序列化成 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 二叉樹的序列化與反序列化

序列化是將乙個資料結構或者物件轉換為連續的位元位的操作,進而可以將轉換後的資料儲存在乙個檔案或者記憶體中,同時也可以通過網路傳輸到另乙個計算機環境,採取相反方式重構得到原資料。請設計乙個演算法來實現二叉樹的序列化與反序列化。這裡不限定你的序列 反序列化演算法執行邏輯,你只需要保證乙個二叉樹可以被序列...