python - 如何运行 BST 树函数的高度
问题描述
有人可以帮我解决这个问题吗?我在 python 中实现了一个二叉搜索树数据结构,并编写了一个 BST_height() 函数来计算树的高度。但是当我运行我的代码时,它给了我一个错误,说'self is not defined'。我知道为什么会出现错误,但是您能否建议一些其他方法来使用根节点运行 BST_height 函数
class Node:
def __init__(self, data=None):
self.data = data
self.left = None
self.right = None
class BinarySearchTree:
def __init__(self):
self.root = Node()
def display(self):
print('''
{}
/ \\
{} {}
/ \\ / \\
{} {} {} {}
BINARY TREE
'''.format(tree.root.data, tree.root.left.data, tree.root.right.data, tree.root.left.left.data, tree.root.right.right.data, tree.root.left.right.data, tree.root.right.left.data))
def checkRoot(self):
if self.root.data != None:
return 'Root node exists'
else:
return 'Root node doesn\'t exists'
def insert(self, data):
newNode = Node(data)
if self.root.data == None:
# creating the root node
self.root = newNode
else:
self.insertNode(data, self.root)
def insertNode(self, data, curNode):
if data < curNode.data:
if curNode.left == None:
curNode.left = Node(data)
else:
self.insertNode(data, curNode.left)
elif data > curNode.data:
if curNode.right == None:
curNode.right = Node(data)
else:
self.insertNode(data, curNode.right)
else:
print('The value already exists ha ha')# funny
def BST_height(self, node):
if node == None:
return -1
leftHeight = height(node.left)
rightHeight = height(node.right)
return max(leftHeight, rightHeight) + 1
tree = BinarySearchTree()
tree.insert(30)# root node
tree.insert(24)
tree.insert(45)
tree.insert(90)
tree.insert(18)
tree.insert(28)
tree.insert(40)
tree.display()
# getting an error here
# I know self.root can\'t be used outside the class but can you suggest some other way tree.BST_height(self.root)
解决方案
代码有2个问题:
- Self 是你在类函数中使用的东西。在外面你可以简单地使用对象变量。像这样:
tree.BST_height(tree.root)
BST_height
函数有一个小错误。它调用height
而不是self.BST_height
:
def BST_height(self, node):
if node == None:
return -1
leftHeight = self.BST_height(node.left)
rightHeight = self.BST_height(node.right)
return max(leftHeight, rightHeight) + 1
您可能想阅读本文以清楚了解整个self
主题。
推荐阅读
- heatmap - 使用热图角度 8 的问题
- flutter - Flutter 文档很混乱,SliverOverlapAbsorber 和 SliverOverlapInjector 有什么用?
- typescript - 使用一个函数的推断泛型参数类型来键入其他函数
- angular - 角复选框没有响应
- excel - Microsoft Excel:使用时间格式的“INT”函数
- python - Python 模块未找到但存在于文件夹中
- python - 如何使用 Python jsonschema RefResolver 解析单个引用
- android - 如果在任务之间建立的 Internet 连接正在运行,则刷新活动
- android-webview - 我网站的 Moodle“上传”按钮在 android webview 中不起作用
- html - 如何使用角度将opentdb API中的“””等html5字符转换为正常语法