在 Python 中实现搜索树



我知道关于这个主题已经有多个问题,但没有一个能解决我的问题。

我正在尝试构建一个具有两个选项的搜索树:

  1. 构建树

  2. 从用户那里获取树并在其中搜索(例如,作为列表,字典等)

我的问题是第二个选项,因为它似乎是一个AttributeError

当我在没有给定树的情况下运行我的代码时,它工作正常,但是当我尝试使用列表时会出现一条错误消息:

    self.root.add(i)
AttributeError: 'NoneType' object has no attribute 'add'

我的代码:

import unittest
class Testfunction(unittest.TestCase):
  def test(self):
    init = SearchTree(['x', 'b', 'eee'])
    init.add('left')
    init.add('right')
    init.tolist()
    self.assertEqual(init.__contains__('left'),True )
    self.assertEqual(init.add('xx'), None )
class Node:
  def __init__(self, val):
    self.value = val
    self.left = None
    self.right = None
  def insert(self, item):
    if self.value == item:
        return False
    elif self.value > item:
        if self.left:
            return self.left.insert(item)
        else:
            self.right = Node(item)
            return True
  def find(self, item):
    if self.value == item:
        return True
    elif self.value > item:
        if self.left:
           return self.left.find(item)
        else:
           return False
    else:
        if self.right:
            return self.right.find(item)
        else:
            return False
  def tolist(self):
     if self:
         if self.left:
             self.left.tolist()
         if self.right:
             self.right.tolist()
 class SearchTree:
   def __init__(self, items=None):
    # if items . then should be inserted
     self.items = items
     self.root = None
     if items:
         for i in self.items:
             self.root.add(i)

  def __contains__(self, item):
     if self.root:
         return self.root.find(item)
     else:
         return False

  def add(self, item):
    if self.root:
        return self.root.insert(item)
    else:
        self.root  = Node(item)

  def tolist(self):
     self.root.tolist()


test = Testfunction()
test.test()

检查项目时,修改行以使用构建的添加。

if items:
     for i in self.items:
         # Instead of self.root.add(i)
         self.add(i)

最新更新