Python二进制搜索树,带有键和值

时间:2017-05-25 16:03:04

标签: python insert key binary-search-tree

我需要实现二进制搜索树类作为家庭作业,但我很难制作插入功能。我已经通过谷歌了解了一些解决方案或可能性如何做到这一点,但他们都没有使用键和价值(大多数只是价值)或者如果他们使用了键,他们有很多单独的功能,我是我认为不允许这样做。

所以预先构建的只是:

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 is not defined”或“root.right” “没有这样的属性等...... 我认为这是有道理的,因为self.root被声明为None。

但是我现在如何实际修复它以使插入功能起作用?

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

你能从这里弄明白吗?或者你想要更多方向