297 二叉樹的序列化與反序列化(Python)

2021-10-07 06:28:35 字數 2275 閱讀 5104

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

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

示例:你可以將以下二叉樹:

1

/ \2 3

/ \4 5

序列化為 「[1,2,3,null,null,4,5]」

想法:使用棧和廣度優先演算法遍歷樹來實現序列化和反序列化

1.序列化:層序遍歷(廣度優先),依次遍歷棧中所有根節點儲存左右子樹值,如遇左右子樹非空時需要儲存根節點用於後續訪問,如遇空值則跳過

2.反序列化:依次遍歷序列中所有值,彈出棧中根節點,如果不為空則為其新增左子樹和右子樹,如果遇到空則直接跳過

# definition for a binary tree node.

# class treenode(object):

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

codec

:def

serialize

(self, root)

:"""encodes a tree to a single string.

:type root: treenode

:rtype: str

"""# 樹為空,直接返回

if root ==

none

:return

# 儲存當前根節點

stack =

[root]

# 儲存序列

series =

[root.val]

while stack:

tree = stack.pop(0)

# 如果當前左節點不為空

if tree.left !=

none

:# 序列中新增該值

# 棧中儲存這個非空根節點

else

:# 序列中新增none

none

)# 如果當前右節點不為空,處理同左節點

if tree.right !=

none

:else

:none

)return series

defdeserialize

(self, data)

:"""decodes your encoded data to tree.

:type data: str

:rtype: treenode

"""# 序列為空,直接返回

if data ==

:return

none

# 儲存樹

deseries = treenode(data.pop(0)

)# 儲存當前所有非空根節點

stack =

[deseries]

while stack:

root = stack.pop(0)

# 如果根節點為空,跳過

if root.val ==

none

:continue

# 彈出左節點值,如果為空跳過

value = data.pop(0)

if value !=

none

:# 生成左子樹

left = treenode(value)

# 連線子樹

root.left = left

# 儲存左子樹根節點用於後續訪問

# 處理右節點同左節點處

value = data.pop(0)

if value !=

none

: right = treenode(value)

root.right = right

return deseries

# your codec object will be instantiated and called as such:

# codec = codec()

# codec.deserialize(codec.serialize(root))

參考鏈結

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

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

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

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

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

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