題目:
思路+代碼:
思路:
1.序列化,採用層序遍歷;這裏添加null節點操作,是判斷節點是否爲空添加,所以res確實有多添加null
2.反序列化:先構建根節點,遍歷有效的節點val,每次pop一個節點就添加它的左右節點;
class Codec:
def serialize(self, root):
"""Encodes a tree to a single string.
:type root: TreeNode
:rtype: str
"""
if not root: return "[]"
res, node_list = [], []
node_list.append(root)
while node_list:
layer_list = []
node = node_list.pop(0)
if node:
res.append(str(node.val))
layer_list.append(node.left)
layer_list.append(node.right)
else:
res.append("null")
node_list.extend(layer_list)
return '[' + ','.join(res) + ']'
def deserialize(self, data):
"""Decodes your encoded data to tree.
:type data: str
:rtype: TreeNode
"""
if data == '[]':
return
print(data)
vals = data[1:-1].split(',') # 不包括兩個中括號以逗號分割
print(vals)
node_ls = []
root = TreeNode(int(vals[0])) # 根節點
node_ls.append(root)
i = 1
while node_ls:
node = node_ls.pop(0)
print(i)
if vals[i] != 'null':
node.left = TreeNode(int(vals[i]))
node_ls.append(node.left)
i +=1
if vals[i] != 'null':
node.right = TreeNode(int(vals[i]))
node_ls.append(node.right)
i +=1
return root