现在的位置: 首页 > 综合 > 正文

python的二叉树

2013年08月22日 ⁄ 综合 ⁄ 共 1707字 ⁄ 字号 评论关闭
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)))


抱歉!评论已关闭.