python的二叉樹

來源:互聯網
上載者:User
class BST:    def __init__(self):        self.root = None    def insert(self,x):        if self.root == None:            self.root = Node(x)        elif self.root.data > x:            self.root.left = self.root.left.insert(x)        elif self.root.data < x:            self.root.right = self.root.right.insert(x)        else:            return    def __repr__(self):        return ('(%s, %s, %s )' % (repr(self.root.left), repr(self.root.data), repr(self.root.right)))    def lookup(self,x):        if self.root == None:            return False        if self.root.data == x:            return True        elif self.root.data > x:            return self.root.left.lookup(x)        else:            return self.root.right.lookup(x)class Node:    def __init__(self,data = None,left = None,right = None):        self.data, self.left, self.right = data, left, right

寫完過後 發覺了很大個問題

elif self.root.data > x:            return self.root.left.lookup(x)        else:            return self.root.right.lookup(x)

在這兩句裡面root為None是就出現錯誤想來想去也沒有想到方法,最後在programming python 裡面找到了一種方法,就是把空節點抽象出來,而不是使用None

class BinaryTree:    def __init__(self):        self.tree = EmptyNode()    def __repr__(self):        return repr(self.tree)    def lookup(self,value):        return self.tree.lookup(value)    def insert(self,value):        self.tree = self.tree.insert(value)class EmptyNode:    def __repr__(self):        return '*'    def lookup(self,value):        return False    def insert(self,value):        return BinaryNode(self,value,self)class BinaryNode:    def __init__(self,left,value,right):        self.data, self.left, self.right = value, left, right    def lookup(self,value):        if self.data == value:            return True        elif self.data < value:            return self.right.lookup(value)        elif self.data > value:            return self.left.lookup(value)    def insert(self,value):        if self.data > value:            self.left = self.left.insert(value)        elif self.data < value:            self.right = self.right.insert(value)        return self    def __repr__(self):        return ('(%s, %s, %s )' %                (repr(self.left), repr(self.data), repr(self.right)))

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.