Skip to main content
 首页 » 编程设计

python之如何在算法中调用二叉搜索树

2025年05月04日9myhome

我正在尝试创建一个简单版本的拼写检查,它接受一个 .txt 文件并比较每个单词是否在字典中找到。我已经建立了将 .txt 文件转换为列表并将字典转换为列表的函数,但我正在努力调用我的拼写检查功能中的字典的排序二叉搜索树。这是 BinarySearchTree 的类,后面是我的拼写检查器函数

class BinarySearchTree: 
 
    def __init__(self): 
        self.root = None 
 
    def insert(self,val): 
        if self.root == None: 
            self.root = BinaryNode(val) 
        else: 
            self.recursive_insert(root,val) 
 
    def recursive_insert(self,parent,val): 
        if parent.data < val: 
            if parent.right != None: 
                self.recursive_insert(parent.right,val) 
            else: 
                parent.right = BinaryNode(val) 
        else: 
            if parent.left != None: 
                self.recursive_insert(parent.left,val) 
            else: 
                parent.left = BinaryNode(val) 
 
    def dictionary_insert(self,text): 
        for word in text: 
            self.insert(word) 
 
    def search(self,val): 
        if self.recursive_search(self.root,val) != None: 
            return True 
        else: 
            return False 
 
    def recursive_search(self,parent,val): 
        if parent.data == val: 
            return parent 
        elif parent.data > val: 
            return self.recursive_search(parent.left,val) 
        else: 
            return self.recursive_search(parent.right,val) 

这是我的拼写检查功能:

def spell_checker(text): 
 
    N = len(text) 
    misspelled = 0 
    for i in range(N): 
        if BinarySearchTree().search(text[i]) == True: 
            misspelled = misspelled 
        else: 
            misspelled = misspelled + 1 
            print text[i] 
    if misspelled == 0: 
        print "There are no spelling errors!" 

如有任何帮助,我们将不胜感激。

请您参考如下方法:

当您第一次调用 recursive_search 时,您将 self.root 作为 parent 传递。但是,在 __init__ 中,self.root 被设置为 None。因此,尝试访问 parent.data 会给您一个错误,因为 None.data 不存在。作为设置过程的一部分,您需要执行 dictionary_insert,传入有效单词列表,以便树中确实包含单词:

dct = BinarySearchTree() 
dct.dictionary_insert(valid_word_list) 

您还需要更正 insert 的最后一行:

self.recursive_insert(self.root, val)