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