Python中的二进制搜索树数据结构

时间:2015-02-20 07:41:49

标签: python binary-search-tree

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

  

回溯(最近一次呼叫最后):文件" test.py",第40行,in          printTree中的myTree.printTree()文件" test.py",第23行       printTree(self.left)NameError:全局名称' printTree'未定义

代码:

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()

我不能以这种方式传递当前实例吗?

1 个答案:

答案 0 :(得分:2)

您对方法中printTree的递归调用应为self.printTree()。 Python到C ++的默认范围是不同的!

在C ++中,默认范围是当前对象(*this),而在Python中并非如此。无论我们处理全局函数还是方法,默认(非限定)范围都是相同的。