【问题标题】:"NameError: name 'insert' is not defined " when i try to use recursion in a method“NameError: name 'insert' is not defined” 当我尝试在方法中使用递归时
【发布时间】:2021-11-02 18:08:27
【问题描述】:
class Bst:
    def __init__(self):
        self.root=None
    
    def insert(self,data):
          
        if self.root==None:
            self.root=node(data)
        else:
            if data <= self.root.data:
                insert(self.root.left,data)
            else:
                insert(self.root.right,data)

【问题讨论】:

  • insert 是一个类方法。调用类方法的语法与调用函数的语法略有不同。该方法的第一个参数起着特殊的作用。我们称它为self 以提醒自己它很特别。您必须将insert 称为some_bst_object.insert(data)。在你的情况下,self.root.right.insert(data)
  • 是的,谢谢你花了我一段时间才弄清楚.. 显然

标签: python recursion binary-search-tree


【解决方案1】:

代码应该是这样的

class BST():
def __init__(self):
    self.root=None
def insert(self,root,data):
        if root.data > data:
            if root.left==None:
                root.left=node(data)
            else:
                self.insert(root.left,data)
        else:
            if root.right==None:
                root.right=node(data)
            else:

                self.insert(root.right,data)

【讨论】:

  • 您能否说明您更改 OP 代码的位置和原因?
  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
  • 不,这不是很好。最好只保留两个论点,就像您最初的问题一样。只需将调用 insert(self.root.left,data) 替换为 self.root.left.insert(data)
猜你喜欢
  • 2021-02-17
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 2017-01-09
相关资源
最近更新 更多