我有以下代码用于对二叉树进行序列化和反序列化
这是Interivew练习的简化版本。
我只想使用原始的python构造 无需额外的pkg加载和递归。
任何指向网站的指针都非常感谢。
我不确定该网站会继续询问更多细节。
def serialize(Node):
"""ONLY_USE_PRIMITIVE_PYTHON_CONSTRUCT_AND_RECURSION"""
return str
def deserialize(str):
"""ONLY_USE_PRIMITIVE_PYTHON_CONSTRUCT_AND_RECURSION"""
return Node
class Node:
def __init__(self,data):
self.left = None
self.right = None
self.data = data
#def printTree(self):
# print(self.data)
def insert(self,data):
if self.data:
if self.data > data :
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
elif self.data < data:
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
def printTree(self):
if self.left:
self.left.printTree()
if self.right:
self.right.printTree()
print(self.data)
def serialize(Node, serial):
if Node != None:
serial.append(Node.data)
serialize(Node.left, serial)
serialize(Node.right, serial)
else:
serial.append('x')
def deserialize(serial):
root = Node(None)
ptr=0
data_len=len(serial)
if(data_len>0 and serial[ptr]!='x'):
root.insert(serial[ptr])
ptr=ptr+1
elif (data_len==0 or serial[ptr]=='x'):
return root
while(ptr<data_len):
if(serial[ptr]=='x'):
ptr=ptr+1
else:
root.insert(serial[ptr])
ptr=ptr+1
return root
答案 0 :(得分:0)
我将假设data
是整数值。即使不是这种情况,修改下面的代码也不会很困难。
当然有很多方法可以序列化。如果您需要避免使用deserialize
函数的第二个参数,那么如果知道正确的子项的数据从串行字符串中的哪个偏移量开始,将很有帮助。
所以这是一个建议:
def serialize(node):
if node is None:
return ""
left = serialize(node.left)
right = serialize(node.right)
return str(node.data) + ":" + str(len(left)) + ":" + left + right
def deserialize(serial):
if serial == "":
return None
data, leftsize, content = serial.split(":", 2)
node = Node(int(data))
node.left = deserialize(content[0:int(leftsize)])
node.right = deserialize(content[int(leftsize):])
return node