序列化是將乙個資料結構或者物件轉換為連續的位元位的操作,進而可以將轉換後的資料儲存在乙個檔案或者記憶體中,同時也可以通過網路傳輸到另乙個計算機環境,採取相反方式重構得到原資料。
請設計乙個演算法來實現二叉樹的序列化與反序列化。這裡不限定你的序列 / 反序列化演算法執行邏輯,你只需要保證乙個二叉樹可以被序列化為乙個字串並且將這個字串反序列化為原始的樹結構。
其實這道題,可以參照之前的一道題102.二叉樹的層序遍歷,利用佇列,採取bfs的方法就能完成層序遍歷。並且,在該題解中也給出了層序遍歷的模板。不再贅述,上**:
# 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
"""ifnot root:
return
"" queue = collections.deque(
) res =
while queue:
node = queue.popleft(
)if node:
str(node.val)
)else
"null"
)return
'['+
','.join(res)
+']'
defdeserialize
(self, data)
:"""decodes your encoded data to tree.
:type data: str
:rtype: treenode
"""if data =='':
return
none
vals, i = data[1:
-1].split(
','),1
root = treenode(
int(vals[0]
))queue = collections.deque(
)while queue:
node = queue.popleft(
)if vals[i]
!="null"
: node.left = treenode(
int(vals[i]))
i +=
1if vals[i]
!="null"
: node.right = treenode(
int(vals[i]))
i +=
1return root
# your codec object will be instantiated and called as such:
# codec = codec()
# codec.deserialize(codec.serialize(root))
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...
LeetCode每日一題(題139)
題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...