这题主要还是运用了广度搜索优先的方法。一层一层的遍历来获得每层的数据。然后依次安装上去。代码如下:
# 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 not root:
return ''
stack1 = [root]
list1 = [root.val]
while len(stack1) != 0:
stack2 = []
for i in stack1:
if i:
stack2.append(i.left)
stack2.append(i.right)
for i in stack2:
if i:
list1.append(i.val)
else:
list1.append(None)
stack1 = stack2
if stack2 == []:
return str(list1)
def deserialize(self, data):
"""Decodes your encoded data to tree.
:type data: str
:rtype: TreeNode
"""
if data == '':
return None
data = data[1:-1]
data = data.split(', ')
root = TreeNode(int(data[0]))
data = data[1:][::-1]
stack1 = [root]
while data != []:
stack2 = []
for i in stack1:
if data[-1] == 'None':
data.pop()
i.left = None
if data[-1] == 'None':
data.pop()
i.right = None
else:
i.right = TreeNode(int(data.pop()))
stack2.append(i.right)
else:
i.left = TreeNode(int(data.pop()))
stack2.append(i.left)
if data[-1] == 'None':
i.right = None
data.pop()
else:
i.right = TreeNode(int(data.pop()))
stack2.append(i.right)
stack1 = stack2
return root