python - 什么会使此 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))
谢谢你。
解决方案
根据您的函数定义,def insertion(self,root, num)
采用 2 个主要参数:
root
BinarySearchTree
:根据您的实现,它必须是类的对象num
,这将是一个int
当你调用r.insertion(7,3)
时,num
得到一个 int;但是,root
参数也得到一个int
,这是不正确的(这就是错误背后的原因)。如果要插入r
,则必须使用 调用它r.insertion(r, 3)
,因为它r
是要插入值的 BST 的根节点。
推荐阅读
- swift - 如何创建不可变的惰性属性?
- cmd - 如何终止批处理文件
- python - 即使 foreign_keys 为 ON,FOREIGN KEY 约束也会失败
- javascript - 是否可以使用带有 Javascript 的 HTML 的 CANVAS 上下文(ctx)来制作字体选择器?
- android - Admob 广告停止工作 - iOS14 是否也影响 android 版本控制?
- kotlin - 在接口方法中获取当前事务句柄
- c - * 之间有什么区别
和 * 在 C 中? - mysql - mysql 日志文件的文件位置
- arrays - 将 2 个数组合并为 1 个数组并过滤这个合并的数组,
- python-3.x - 如何根据组将值归入异常单元格?