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

2021-10-02 23:10:25 字數 4238 閱讀 3682

序列化是將乙個資料結構或者物件轉換為連續的位元位的操作,進而可以將轉換後的資料儲存在乙個檔案或者記憶體中,同時也可以通過網路傳輸到另乙個計算機環境,採取相反方式重構得到原資料。

請設計乙個演算法來實現二叉樹的序列化與反序列化。這裡不限定你的序列 / 反序列化演算法執行邏輯,你只需要保證乙個二叉樹可以被序列化為乙個字串並且將這個字串反序列化為原始的樹結構。

總感覺被演了。

class

codec

:#序列化

defserialize

(self, root)

:def

rserialize

(root, string)

:""" a recursive helper function for the serialize() function."""

# check base case

if root is

none

: string +=

'none,'

else

: string +=

str(root.val)

+','

string = rserialize(root.left, string)

string = rserialize(root.right, string)

return string

return rserialize(root,'')

# 反序列化

defdeserialize

(self, data)

:def

rdeserialize

(l):

""" a recursive helper function for deserialization."""

if l[0]

=='none'

: l.pop(0)

return

none

root = treenode(l[0]

) l.pop(0)

root.left = rdeserialize(l)

root.right = rdeserialize(l)

return root

data_list = data.split(

',')

root = rdeserialize(data_list)

return root

執行用時 :216 ms, 在所有 python3 提交中擊敗了22.95%的使用者

記憶體消耗 :22.5 mb, 在所有 python3 提交中擊敗了20.36%的使用者

–演算法簡潔,但是用時較長

class

codec

:def

serialize

(self, root)

: stack =

ifnot root:

return stack

stack =

[root]

res =

while stack:

new_stack =

for i in stack:

if i is

none

:none

)else

: stack = new_stack

while res[-1

]isnone

: res.pop(

)print

(res)

return res

defdeserialize

(self, data):if

not data:

return

size =

len(data)

root = treenode(data[0]

) parents =

[root]

childs =

i =1while i < size:

if childs:

parents = childs

childs =

for parent in parents:

if i < size and data[i]

isnot

none

: node = treenode(data[i]

) parent.left = node

i +=

1if i < size and data[i]

isnot

none

: node = treenode(data[i]

) parent.right = node

i +=

1return root

執行用時 :104 ms, 在所有 python3 提交中擊敗了97.10%的使用者

記憶體消耗 :17.5 mb, 在所有 python3 提交中擊敗了58.08%的使用者

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

題目 傳送門 思路 序列化 二叉樹的序列化本質上是對其值進行編碼,更重要的是對其結構進行編碼。可以遍歷樹來完成上述任務。我們可以先序遍歷這顆二叉樹,遇到空子樹的時候序列化成 none,否則繼續遞迴序列化。反序列化 首先我們需要根據 把原先的序列分割開來得到先序遍歷的元素列表,然後從左向右遍歷這個序列...

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

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

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

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