Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带键和值的Python二叉搜索树_Python_Insert_Key_Binary Search Tree - Fatal编程技术网

带键和值的Python二叉搜索树

带键和值的Python二叉搜索树,python,insert,key,binary-search-tree,Python,Insert,Key,Binary Search Tree,我需要实现一个二进制搜索树类作为家庭作业,但是我很难实现插入函数。我在谷歌上搜索了很多,想找到一些解决方案或可能的方法,但是没有一个使用了键和值(大部分只是值),或者如果他们也使用了键,他们有很多独立的函数,我想我是不允许这样做的 因此,预构建的内容很简单: class Node: def __init__(self, key, value): self.key = key self.value = value self.left = se

我需要实现一个二进制搜索树类作为家庭作业,但是我很难实现插入函数。我在谷歌上搜索了很多,想找到一些解决方案或可能的方法,但是没有一个使用了键和值(大部分只是值),或者如果他们也使用了键,他们有很多独立的函数,我想我是不允许这样做的

因此,预构建的内容很简单:

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被声明为None

但我现在如何真正修复它以使insert函数工作呢


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

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


因此,在插入节点时,首先要检查字典中的键(您将自己在
\uuuuu init\uuuu
中初始化一个空字典)。如果它已经存在,那么您只需要替换该特定键的节点值。否则,您将以与任何BST中相同的方式添加新节点,并且还记得更新字典以将密钥映射到其节点。

早上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)

你能从这里找到它吗,或者你想知道更多的方向吗?我想insert的“键”可能是“左”或“右”就是这样,这是预构建的,我显然已经有了我需要的所有东西,我现在只被允许更改内部的函数。什么是
self.root
呢?老实说,我不知道我自己。。。树根可能是这棵树的第一根。哦,我想我找到了。根只是一个节点。让您的插入函数检查根是否为
None
,如果是,则为itI分配一个新节点。我还想先检查根是否为None,然后为其分配新节点(键、值)。然后我想我需要检查这个值是大于还是小于某个值,所以它要么向左,要么向右。但是我不知道如何/检查什么,因为键值部分让我感到困惑。添加作业的措辞如何?也许我们可以帮助你理解你的要求,但不是用英语写的。。我尽力翻译它:“这个语义应该做以下工作:tree.insert(key,value):将给定的值放在特定的键下。如果键已经存在,用新的值替换它的值。否则,将创建一个新节点,使二进制搜索树条件仍然正确。tree.remove(key):移除特定键下的节点,同时BST coniditions仍然正确。如果该键不存在,则提交KeyError Exception。found=tree。find(key):返回特定键的节点,如果该节点不存在,则返回无节点。在它说明“这是节点的定义和SearchTree的基本定义”之前(从上面插入代码)。实现一个完整的SearchTree实现。现在要编辑的部分是代码中有“pass”的部分。哦,我认为这是一个带有“key”的常规二叉树,这些值在计算上并不有趣