具体思路用到了广度有限搜索的思想,然后对None节点特殊处理一下即可,具体的代码如下:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Serialize(self, root):
# write code here
res = ''
if not root:
return res
tmp = [root]
while tmp:
_tmp = []
for node in tmp:
if node:
_tmp.append(node.left)
_tmp.append(node.right)
res += str(node.val) + ','
else:
res += '#' + ','
tmp = _tmp
if res[-1] == ',':
res = res[:-1]
return res
def Deserialize(self, s):
# write code here
if not s:
return
val_list = s.split(',')
root = TreeNode(int(val_list[0]))
ptr = 1
node_list = [root]
while len(node_list) != 0:
val_tmp = val_list[ptr: ptr+len(node_list)*2]
ptr += 2*len(node_list)
node_tmp = []
for idx, node in enumerate(node_list):
if idx*2 < len(val_tmp) and val_tmp[2*idx] != '#':
node.left = TreeNode(int(val_tmp[2*idx]))
node_tmp.append(node.left)
if idx*2 + 1 < len(val_tmp) and val_tmp[2*idx+1] != '#':
node.right = TreeNode(int(val_tmp[2*idx + 1]))
node_tmp.append(node.right)
node_list = node_tmp
return root