首页 > 解决方案 > 什么会使此 BST 代码中的插入方法起作用?

问题描述

除了插入方法外,该类似乎运行良好。所有打印语句方法都有效。我想在树中插入一个节点,但是一旦我调用,r.insertion(7,3)它就不起作用并说没有“键的属性”。如何修复这个二叉搜索树?

class BinarySearchTree:
    def __init__(self,rootObj):
        self.key = rootObj
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self,newNode):
        if self.leftChild == None:
            self.leftChild = BinarySearchTree(newNode)
        else:
            t = BinarySearchTree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t

    def insertRight(self,newNode):
        if self.rightChild == None:
            self.rightChild = BinarySearchTree(newNode)
        else:
            t = BinarySearchTree(newNode)
            t.rightChild = self.rightChild
            self.rightChild = t
            
    def insertion(self,root, num):
    
        if root == None:
            return Node(num)
        #check if less than
        
        if num < root.key:
            root.left = insertion(self, root.left, num)
            
        elif num >= root.key:
            root.right = insertion(self, root.right, num)
            
        return root


    def getRightChild(self):
        return self.rightChild

    def getLeftChild(self):
        return self.leftChild

    def setRootVal(self,obj):
        self.key = obj

    def getRootVal(self):
        return self.key


r = BinarySearchTree(7)
print(r.getRootVal())
print(r.getLeftChild())
r.insertLeft(4)
print(r.getLeftChild())
print(r.getLeftChild().getRootVal())
r.insertRight(9)
print(r.getRightChild())
print(r.getRightChild().getRootVal())
r.getRightChild().setRootVal('hello')
print(r.getRightChild().getRootVal())
print(r.insertion(7,3))

谢谢你。

标签: pythonpython-3.xalgorithmbinary-search-tree

解决方案


根据您的函数定义,def insertion(self,root, num)采用 2 个主要参数:

  1. rootBinarySearchTree:根据您的实现,它必须是类的对象
  2. num,这将是一个int

当你调用r.insertion(7,3)时,num得到一个 int;但是,root参数也得到一个int,这是不正确的(这就是错误背后的原因)。如果要插入r,则必须使用 调用它r.insertion(r, 3),因为它r是要插入值的 BST 的根节点。


推荐阅读