关于二叉树序列化和反序列化的问题

question on serialization and deserialization in binary tree

Google 提出这个问题来设计一个序列化和反序列化二叉树的算法。我在网上找到了一种解决方案。我不太明白的部分是为什么第 20 行需要条件,其中 "if node == None:", self.root = Node(value) ?因为毕竟这个程序会提示用户以例如 1,3,5 的形式输入节点以使程序运行所以不会出现 node =none 的情况,因为用户输入是必要的?我在这里误会了吗?

class Node:
    def __init__(self, value):
        self.left = None
        self.right = None
        self.value = value

class Tree:
    def __init__(self):
        self.root = None

    def addNode(self, node, value): #Why when node==None, self.root= Node(value)?
        if node == None:
            self.root = Node(value)
        else:
            if value < node.value:
                if not node.left:
                    node.left = Node(value)
                else:
                    self.addNode(node.left, value)
            else:
                if not node.right:
                    node.right = Node(value)
                else:
                    self.addNode(node.right, value)


def serialize(root):
    values = []
    def serializer(node):
        if not node:
            values.append('?')
        else:
            values.append(str(node.value))
            serializer(node.left)
            serializer(node.right)
    serializer(root)
    return ','.join(values)

def deserialize(s):
    values = iter(s.split(','))
    def deserializer():
        val = next(values)
        if val == '?':
            return None
        else:
            node = Node(int(val))
            node.left = deserializer()
            node.right = deserializer()
            return node
    return deserializer()

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)
    s1 = serialize(theTree.root)
    s2 = serialize(deserialize(s1))
    print(s1) 
    print(s2)
    assert s1 == s2

在这一行中,当树中输入第一个数字时,根将为 None

for number in numbers:
    theTree.addNode(theTree.root, number)

因此,需要第 20 行。