Вопрос об аргументе в функциях для десериализации строки обратно в дерево в Python - PullRequest
1 голос
/ 27 апреля 2020

Вопрос, который я здесь задаю, основан на 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...