實現兩個函數,分別用來序列化和反序列化二叉樹
#-*- coding:utf-8 -*-
class TreeNode:
def __init__(self,x):
self.val = x
self.left=None
self.right =None
class Solution:
def Serialize(self,root):
retList=[]
def preOrder(root):
if root==None:
retList.append('#')
return
retList.append(str(root.val))
preOrder(root.left)
preOrder(root.right)
preOrder(root)
return ' '.join(retList)
def Deserialize(self,s):
retList=s.split()
def dePreOrder():
if retList==[]:
return None
rootVal=retList[0]
del retList[0]
if rootVal=='#':
return None
node = TreeNode(int(rootVal))
leftNode=dePreOrder()
rightNode=dePreOrder()
node.left=leftNode
node.right=rightNode
return node
pRoot =dePreOrder()
return pRoot
if __name__ == '__main__':
a=TreeNode(1)
b=TreeNode(2)
c=TreeNode(3)
d=TreeNode(4)
e=TreeNode(5)
f=TreeNode(6)
g=TreeNode(7)
h=TreeNode(8)
i=TreeNode(9)
a.left=b
a.right=c
b.left=d
b.right=e
c.right=f
d.left=g
e.right=h
f.left=i
s=Solution()
print(s.Serialize(a))
運行結果爲:
1 2 4 7 # # # 5 # 8 # # 3 # 6 9 # # #