請實現兩個函式,分別用來序列化和反序列化二叉樹。
您需要確保二叉樹可以序列化為字串,並且可以將此字串反序列化為原始樹結構。
深度優先遍歷
1、序列化的過程可以採用深度優先遍歷方法,此處採用先序遍歷
2、對於將一棵二叉樹的先序遍歷結果(採用列表儲存),第乙個元素為二叉樹的根節點,剩餘元素可以看成由根節點的左右子樹構成,而每一棵子樹又是一棵二叉樹。
3、對於2中的描述,故可以採用遞迴的方法,由一棵二叉樹的先序遍歷結果來還原一棵樹(由於序列化過程中會將葉子節點的空指標儲存,故可以還原)。
class
solution
:def
serialize
(self, root)
:"""encodes a tree to a single string.
:type root: treenode
:rtype: str
"""treelist =
defdfs
(node)
:# 深度優先遍歷之先序遍歷
if node:
str(node.val)
) dfs(node.left)
dfs(node.right)
else
:'#'
) dfs(root)
return
','.join(treelist)
defdeserialize
(self, data)
:"""decodes your encoded data to tree.
:type data: str
:rtype: treenode
"""defdfs()
: first = vals.pop(0)
# 每個節點可以看做一棵樹的根節點
if first ==
'#':
return
none
else
: node = treenode(
int(first)
) node.left = dfs(
) node.right = dfs(
)return node
vals = data.split(
',')
return dfs(
)
二叉樹 序列化與反序列化
序列化 serialization 在電腦科學的資料處理中,是指將資料結構或物件狀態轉換成可取用格式 例如存成檔案,存於緩衝,或經由網路中傳送 以留待後續在相同或另一台計算機環境中,能恢復原先狀態的過程。從一系列位元組提取資料結構的反向操作,是反序列化 也稱為解編組 deserialization ...
二叉樹序列化與反序列化
層序遍歷 實現二叉樹的序列化與反序列化。序列化二叉樹的方式有很多,最經典的就是將一顆二叉樹轉化為字串,這樣方便儲存到檔案。反序列化時只需解析這個字串,提取出每個節點的內容資訊,將二叉樹還原。二叉樹序列化有許多應用,比如 oj 平台在判斷你提交的二叉樹是否正確時,往往是將你的二叉樹序列化成字串,然後與...
序列化 反序列化二叉樹
設計乙個演算法能夠實現序列化和反序列化一棵二叉樹 注意,不是二叉搜尋樹bst 這裡的序列化指的是將一棵二叉樹儲存到檔案中,反序列化就是從檔案中讀取二叉樹結點值重構原來的二叉樹。前一篇文章儲存二叉搜尋樹到檔案中 解決了儲存一棵二叉搜尋樹到檔案中的問題,但是由於本題目的意思是要把一棵二叉樹儲存到檔案中並...