[英]Desearilize binary search tree
我正在为即将到来的采访做练习,并且正在尝试对二进制搜索树进行反序列化。 我可以将其用于序列化,但是出现参数编号错误,但我不知道为什么。
我希望将“ 5 2 1###35 18 7##30###”变成一棵树。
错误:类型错误:_deserialize()恰好接受2个参数(给定3个)
def __init__(self,value = None):
self.value = value
self.left_child = None
self.right_child = None
class BinarySearchTree:
def __init__(self):
self.root = None
def insert(self,value):
if self.root is None:
self.root = Node(value)
else:
self._insert(value, self.root)
def _insert(self, value, current_node):
if value < current_node.value:
if current_node.left_child is None:
current_node.left_child = Node(value)
else:
self._insert(value,current_node.left_child)
elif value > current_node.value:
if current_node.right_child is None:
current_node.right_child = Node(value)
else:
self._insert(value,current_node.right_child)
else:
print("Value already inserted!")
def serialize(self,serial):
if self.root is not None:
return ' '.join(self._serialize(self.root, serial))
def _serialize(self, current_node, serial): #Post order
if current_node is not None:
serial.append(str(current_node.value))
self._serialize(current_node.left_child, serial)
self._serialize(current_node.right_child, serial)
else:
serial.append("#")
return serial
def deserialize(self, serial):
vals = iter(serial.split())
return self._deserialize(self, vals)
def _deserialize(self, vals):
value = next(vals)
if value == "#":
return None
node = Node(int(value))
node.left_child = self._deserialize(vals)
node.right_child = self._deserialize(vals)
return node
tree = BinarySearchTree()
tree.insert(5)
tree.insert(2)
tree.insert(1)
tree.insert(35)
tree.insert(18)
tree.insert(7)
tree.insert(30)
root = Node(3)
serial = []
serial = tree.serialize(serial)
print(serial)
tree.deserialize(serial)
正如@Primusa指出的那样, return self._deserialize(self, vals)
应该是return self._deserialize(vals)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.