算法1, 序列化二叉树(二叉树的先序遍历)
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def __init__(self):
self.index = 0
self.listS = []
def RecursionSe(self, root):
series = ''
if root == None:
series += ',$'
else:
series += (',' + str(root.val))
series += self.RecursionSe(root.left)
series += self.RecursionSe(root.right)
return series
def Serialize(self, root):
# write code here
return self.RecursionSe(root)[1:]
测试:
root = TreeNode(11)
root.left = TreeNode(2)
root.right = TreeNode(3)
series = Solution().Serialize(root)
输出:
算法2,反序列化二叉树
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def __init__(self):
self.index = 0
self.listS = []
def RecursionDe(self):
node = None
if self.index < len(self.listS):
if self.listS[self.index] == '$':
self.index += 1 #将节点为空之后就直接返回了
else:
node = TreeNode(int(self.listS[self.index]))
self.index += 1
node.left = self.RecursionDe()
node.right = self.RecursionDe()
return node
def Deserialize(self, s):
# write code here
self.listS = s.split(',') #将序列化的字符串变为数组
return self.RecursionDe()
测试:
root = Solution().Deserialize(series)
print(root.val)
print(root.left.val)
print(root.right.val)
print(root.right.right)
算法3,层次化遍历二叉树
使用一个队列层次遍历
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
# 返回从上到下每个节点值列表,例:[1,2,3]
def PrintFromTopToBottom(self, root):
# write code here
list = []
result = [] #注意两个列表如果相等赋值,那么一下就会更新两个