我如何 运行 这个 BST 树函数的高度

How can I run this Height of a BST tree function

有人可以帮我解决这个问题吗?我在 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 个问题:

  1. Self 是您在 class 函数中使用的东西。在外面你可以简单地使用对象变量。像这样:
tree.BST_height(tree.root)
  1. 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

您可能需要阅读 this 以清楚地了解整个 self 主题。