【问题标题】:Desearilize binary search tree反序列化二叉搜索树
【发布时间】:2019-04-21 02:21:46
【问题描述】:

我正在为即将到来的面试进行练习,并且正在尝试反序列化二叉搜索树。我让它为序列化工作,但我得到一个参数号错误,但我不明白为什么。

我希望“5 2 1 # # # 35 18 7 # # 30 # # #”会变回一棵树。

Error:TypeError: _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)

【问题讨论】:

  • return self._deserialize(self, vals)应该是return self._deserialize(vals),self是python自动传入的
  • @Primusa,如果这是答案,请将其作为答案发布。
  • 谢谢!它开始工作了!
  • @Kevin 我认为这是在“简单的印刷错误”类别下,因为他在其他地方正确使用了self

标签: python algorithm binary-search-tree


【解决方案1】:

正如@Primusa 指出的那样,return self._deserialize(self, vals) 应该是return self._deserialize(vals)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多