我需要实现二进制搜索树类作为家庭作业,但我很难制作插入功能。我已经通过谷歌了解了一些解决方案或可能性如何做到这一点,但他们都没有使用键和价值(大多数只是价值)或者如果他们使用了键,他们有很多单独的功能,我是我认为不允许这样做。
所以预先构建的只是:
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。
但是我现在如何实际修复它以使插入功能起作用?
我对此任务感到有点困惑,因为它使用了键+值,所以我需要插入绑定到特定键的值,如果键已经存在,则覆盖它的值。
答案 0 :(得分:0)
您没有指定,但我猜测密钥的关键是确定特定密钥是否已经在树中,如果是,则在O(1)
运行时复杂度中替换相关节点的值。
因此,当您插入节点时,您将首先检查字典中的键(您将在__init__
中自己初始化一个空字典)。如果它已经存在,那么您只需要替换该特定键的节点值。否则,您以与在任何BST中相同的方式添加新节点,并且还记得更新字典以将密钥映射到其节点。
答案 1 :(得分:0)
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)
你能从这里弄明白吗?或者你想要更多方向