繁体   English   中英

具有键和值的Python二进制搜索树

[英]Python Binary Search Tree with key and value

我需要将Binary Search Tree类作为家庭作业来实现,但是我在制作insert函数时遇到了困难。 我已经通过Google进行了很多研究,找到了一些解决方案或解决方案,但其中没有一个使用键和值(主要是值),或者如果他们也使用键,它们都有大量的独立功能,我不允许这样做。

因此,预先构建的只是:

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

现在的问题是,如果我想检查例如该值是小于还是大于当前Node的值以将其放在右边还是左边,我会得到诸如“未定义root”或“ root.right”之类的错误信息这样的属性等...我想这很有意义,因为self.root被声明为None。

但是,现在如何实际修复它以使插入功能正常工作?

我对此任务有点困惑,因为它使用键+值,因此我需要插入绑定到特定键的值,并在键已经存在的情况下覆盖其值。

您没有指定,但是我猜这些键的要点是确定树中是否已经有特定的键,如果是,则以O(1)运行时复杂度替换相关节点的值。

因此,当您插入节点时,首先要检查字典中的密钥(您将自己在__init__初始化一个空字典)。 如果已经存在,则只需要替换该特定键的节点值即可。 否则,您将以与任何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)

你能从这里弄清楚还是想要更多方向

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM