题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
python实现:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
import json
class Solution:
def Serialize1(self, root):
# write code here
def preOrder(root):
if root:
result.append(str(root.val))
preOrder(root.left)
preOrder(root.right)
else:
result.append("#")
result = []
preOrder(root)
return ",".join(result)
def Deserialize1(self, s):
# write code here
slist = s.split(",")
idx = [-1]
def do(idx):
idx[0] += 1
if idx[0]<len(slist):
#print "idx:", idx[0], "val:", slist[idx[0]]
if slist[idx[0]]=="#":
return None
root = TreeNode(int(slist[idx[0]]))
root.left = do(idx)
root.right = do(idx)
return root
else:
return None
return do(idx)
#法2:使用迭代器
def Deserialize2(self, s):
def do():
try:
val = next(it)
if val=="#":
return None
root = TreeNode(int(val))
root.left = do()
root.right = do()
return root
except StopIteration:
pass
it = iter(s.split(","))
return do()
#法3:
def Serialize(self, root):
def tuplify(root):
return root and (root.val, tuplify(root.left), tuplify(root.right))#######root.val
return json.dumps(tuplify(root))
def Deserialize(self, s):
def detuplify(t):
if t:
root = TreeNode(int(t[0]))
root.left = detuplify(t[1])
root.right = detuplify(t[2])
return root#############3
return detuplify(json.loads(s))