Вопрос, который я здесь задаю, основан на www.dailycodingproblem.com
вопросе 3: «Учитывая root для двоичного дерева, реализуем serialize (root), который сериализует дерево в string и десериализовать (s), что десериализует строку обратно в дерево. "
Приведенный ниже код является одним из найденных решений, и я хочу задать вопрос: -
Для функции десериализации в строке 42, когда я передаю аргумент, такой как
def десериализатор (узел): , за которым следует возвратный десериализатор (узел), вывод говорит «ошибка узла не определена», если я ввожу какие-либо числа, например: 1,3,2.
Однако, это работает, когда я опускаю пустую часть аргумента, то есть def deserializer (), за которой следует return deserializer () ?
Ваша помощь будет высоко ценится!
#must create a constructor every time we create a class eg: def __init__(self)
class Node:
def __init__(self, v):
self.left = None #none = empty state
self.right = None
self.value = v
class Tree:
def __init__(self):
self.root = None
def addNode(self, node, v1):
if node == None:
self.root = Node(v1)
#argument in Node need not have to be v
else:
if v1 < node.value:
#if 2nd value less than 1st value for example?
if not node.left:
node.left = Node(v1) #will not update value
else:
#if it is node.left,update value
self.addNode(node.left, v1)
else:
if not node.right:
node.right = Node(v1)
else:
self.addNode(node.right, v1)
def deserialize(s):
values = iter(s.split(','))
def deserializer(): #why putting def deserializer(node) gives me "node undefined error"?)
val = next(values)
if val == '?':
return None
else:
node = Node(int(val))
node.left = deserializer()
node.right = deserializer()
return node
return deserializer() #why putting return deserializer(node) gives me "node undefined error"?)
if __name__ == '__main__':
# Read input, numbers separated by commas
numbers = [int(n) for n in input().split(',')]
theTree = Tree()
for number in numbers:
theTree.addNode(theTree.root, number)
s2 = serialize(deserialize(s1))
print(s2)