AttributeError:' int'对象没有属性' insert&#39 ;;定义和调用递归方法

时间:2017-07-14 02:18:27

标签: python class recursion binary-search-tree

我正在尝试实施一个简单的插入'我的Tree类的方法:

    class Tree:
      def __init__(self, value):
        self.node = value
        self.leftChild = None
        self.rightChild  = None

      def insert(self, value):
        if self.node is None:
            self.node = value
            return True
        if self.node is not value:
            if self.node > value:
                if self.leftChild  is None:
                    self.leftChild  = value
                else:
                    return self.leftChild.insert(value)
            if self.node < value:
                if self.rightChild  is None:
                    self.rightChild  = value
                else:
                     return self.rightChild.insert(value)
        else:
            return False



tree = Tree(5)
tree.insert(6)
tree.insert(1)
tree.insert(10)

上面的代码给出了以下错误:

  

AttributeError:&#39; int&#39;对象没有属性&#39; insert&#39;

错误出现在&#39;返回self.rightChild.insert(value)&#39;当通过tree.insert(10)调用insert方法时。

我尝试用&#39;返回插入(self.leftChild,value)&#39;来替换错误的行,但这会给我以下错误:

  

NameError:全局名称&#39;插入&#39;未定义

我不知道如何解决这个问题!

1 个答案:

答案 0 :(得分:2)

您要将左右子项设置为value,这是一个整数。要实现递归结构,应将它们设置为新的Tree对象;这样你可以调用他们的Tree方法。这是一个简单的解决方法 - 只需使用Tree(value)代替value

    class Tree:
      def __init__(self, value):
        self.node = value
        self.leftChild = None
        self.rightChild  = None

      def insert(self, value):
        if self.node is None:
            self.node = value
            return True
        if self.node is not value:
            if self.node > value:
                if self.leftChild  is None:
                    self.leftChild  = Tree(value)
                else:
                    return self.leftChild.insert(value)
            if self.node < value:
                if self.rightChild  is None:
                    self.rightChild  = Tree(value)
                else:
                     return self.rightChild.insert(value)
        else:
            return False



tree = Tree(5)
tree.insert(6)
tree.insert(1)
tree.insert(10)