当前位置: 首页 > 知识库问答 >
问题:

带有键和值的Python二叉搜索树

涂玉韵
2023-03-14

我需要实现一个Binary Search Tree类作为家庭作业,但我很难实现insert函数。我在谷歌搜索了很多,想找到一些解决方案或可能的方法,但他们都没有使用过键和值(大多只是值),或者如果他们也使用了键,他们有很多单独的功能,我想这是不允许的。

因此,预构建的只是:

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

class BinarySearchTree:
    def __init__(self):
        self.root = None
        self.size = 0

    def __len__(self):
        return self.size

    def insert(self, key, value):
        pass

    def remove(self, key):
        pass

    def find(self, key):
        pass

现在的问题是,如果我想检查例如值是否小于或大于当前节点以将其放在右侧或左侧,我会收到诸如“root未定义”或“root.right”之类的错误,因此没有这样的属性等...我想这是有道理的,因为 self.root 被声明为“无”。

但我现在如何实际修复它以使insert函数工作呢?

我对这个任务有点困惑,因为它使用键值,所以我需要插入绑定到特定键的值,如果键已经存在,请覆盖其值。

共有2个答案

东方文林
2023-03-14

您没有指定,但我猜键的目的是确定特定的键是否已经在树中,如果是,则在< code>O(1)运行时复杂性中替换相关节点的值。

因此,当您插入节点时,您将首先检查字典中的键(您将在__init__中自己初始化一个空字典)。如果它已经存在,那么您只需为该特定键替换节点的值。否则,您将像在任何BST中一样添加新节点,并记住更新字典以将键映射到它的节点。

叶嘉颖
2023-03-14

早上5点,所以这可能是错误的,但这里有:
关键是我们要排序的内容,值不有趣
您的插入函数可能如下所示:

def insert(self, key, value):
        if self.root = None:
            self.root = Node(key,value)
            return
        #regular binary tree traversal (comparing the key) to find where to insert, lets assume we need to insert on the left
        parent.left = Node(key,value)

你能从这里弄清楚吗,或者你想要更多的方向

 类似资料:
  • 我用java编写了一个实用的二叉搜索树,除了一个关键的函数,搜索。我使用的逻辑是,我将检查根是否为空,然后我要搜索的术语是否等于根(所以返回根)或>根(所以搜索右子树)或 使用printlns查看正在发生的事情,我发现如果值在那里,它将通过正确的if语句(包括将BNode n设置为找到的值),但随后由于某种原因将再次通过方法(返回null)。 这个方法唯一起作用的时候是在搜索根节点的时候,这对我来

  • 我刚刚开始学习Haskell,我正在尝试编写一个代码来搜索二叉树中的特定值,如果当前返回true,否则返回false这就是我的树结构的样子 我不确定如何继续遍历树并返回值的函数。我确实尝试了BFS和DFS,但我不确定一旦得到值后如何返回。 我的函数应该是什么样子的一个例子

  • 这里有问题 二叉搜索树(BST)是一种二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,而小于该节点右子树中所有节点的值。 编写一个函数,根据使用的时间有效地检查给定的二叉搜索树是否包含给定的值。

  • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码:

  • 我搜索了一下,但没有找到这个问题的答案... 我构建了一个非二叉树,因此每个节点可以有任意数量的子节点(我认为称为n元树) 为了有助于搜索,我在构建树的时候给了每个节点一个编号,这样每个节点的子节点会更大,它右边的所有节点也会更大。 像这样的东西: 这样我就有更多的时间进行搜索 当我想插入节点时,问题就来了。如果我想在除了结尾以外的任何地方插入节点,这个模型就不起作用了。 我想了几种方法可以做到这