首页 > 解决方案 > 如何运行 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)

标签: pythondata-structuresheight

解决方案


代码有2个问题:

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

您可能想阅读本文以清楚了解整个self主题。


推荐阅读