簡體   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