繁体   English   中英

在Python中实现搜索树

[英]implementing Search Tree in 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)

暂无
暂无

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

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