繁体   English   中英

Python:在二进制搜索树中搜索

[英]Python: search in binary search tree

我有一个二进制搜索树,其中包含文件中的单词,现在我想从文件中搜索一个单词,它应该返回该单词的长度和出现次数。 我不确定如何从根开始以及如何从根开始。 一些示例的一些解释将不胜感激。

我已附上当前代码:

class Node:
def __init__(self, value, left=None, right=None):
    self.left = left
    self.right = right
    self.value = value
    self.count = 1

def add(self, value):
    if self.value == value:
        self.count += 1
    elif value < self.value:
        if self.left is None:
            self.left = Node(value)
        else:
            self.left.add(value)
    else:
        if self.right is None:
            self.right = Node(value)
        else:
            self.right.add(value)

def printTree(self):
    if self.left is not None:
        self.left.printTree()
    print(str(self.value) + " " + str(self.count))
    if self.right is not None:
        self.right.printTree()





def processFileContent(file):
    words = []
    for line in file:
        unprocessedWords = re.split(" ", line)

    for word in unprocessedWords:
        word = word.lower()
        if word.isalpha():
            words.append(word)

return words


def processFile():
    file = open("text.txt", "r")
    words = processFileContent(file)
    file.close()
    return words


def createTree(words):
    if len(words) > 0:
        tree = Node(words[0])
        for word in words:
            tree.add(word)
        return tree
    else:
        return None

def main():
    words = processFile()
    tree = createTree(words)
    tree.printTree()

请注意,添加到BST涉及搜索值在何处,然后将其放在那里。 因此,如果您可以构建一个,则应该可以搜索一个。

我是这样做的,似乎做这件事

def search(tree, word):
    node = tree
    depth = 0
    count = 0
    while True:
        print(node.value)
        depth += 1
        if node.value == word:
            count = node.count
            break
        elif word < node.value:
            node = node.left
        elif word > node.value:
            node = node.right

    return depth, count

def main():
    print(search(tree, "a"))

暂无
暂无

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

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