2014-12-18 129 views
0

我有一個二進制搜索樹,其中包含文件中的單詞,現在我想從中搜索一個單詞,它應該返回該單詞的長度和發生的次數。我不知道如何從根開始,以及如何從那裏開始。一些例子的一點解釋將非常感謝。Python:在二進制搜索樹中搜索

我重視我當前的代碼:

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() 

回答

0

我做到了這樣,似乎做的事

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")) 
1

注意添加到BST包括搜索,其中值應該是,然後把它那裏。所以如果你可以建立一個,你應該能夠搜索一個。