Python中的二叉搜索树数据结构

2024-09-29 01:20:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图教我自己的Python,来自C++,所以我决定尝试建立一个简单的BST。我设法让我的插入方法工作正常,但是我不知道为什么我的PrtTrutt方法失败。翻译给我的错误是:

Traceback (most recent call last): File "test.py", line 40, in myTree.printTree() File "test.py", line 23, in printTree printTree(self.left) NameError: global name 'printTree' is not defined

代码:

class Node(object):                                                                                                                                                                  

    def __init__(self, value):                                                                                                                                                       
        self.value = value                                                                                                                                                           
        self.left = self.right = None                                                                                                                                                                                                                                                                                                                 

    def insert(self, node):                                                                                                                                                          
        if self is None:                                                                                                                                                             
            self = node                                                                                                                                                              
        else:                                                                                                                                                                        
            if node.value <= self.value:                                                                                                                                             
                if self.left: insert(self.left, node)                                                                                                                                
                else: self.left = node                                                                                                                                               
            else:                                                                                                                                                                    
                if self.right: insert(self.right, node)                                                                                                                              
                else: self.right = node                                                                                                                                              

    def printTree(self):                                                                                                                                                             
        if not self:                                                                                                                                                                 
            return                                                                                                                                                                   
        else:                                                                                                                                                                        
            printTree(self.left)                                                                                                                                                     
            print(self.value)                                                                                                                                                        
            printTree(self.right)

if __name__ == "__main__":
    myTree = Node(3)
    myTree.insert(Node(2))
    myTree.insert(Node(4))

    myTree.printTree()

我不能这样传递当前实例吗?在


Tags: pytestselfrightnodeifvaluedef
1条回答
网友
1楼 · 发布于 2024-09-29 01:20:10

方法中对printTree的递归调用应该是self.printTree()。Python与C++的默认作用域不同!在

在C++中,默认范围是当前对象(^ {CD3>}),Python中不是这样的。无论我们处理的是全局函数还是方法,默认(非限定)范围都是相同的。在

相关问题 更多 >