class Btreenode: #创建树
    def __init__(self,data):
        self.data=data
        self.lchild=None
        self.rchild=None
class BTS:
    def __init__(self,li):
        self.root=None
        for i in li:
            self.insert(i)
    def insert(self,key): #书中插入一个值
        if not self.root:
            self.root=Btreenode(key) #没有根节点,先创建一个根节点
        else:
            p=self.root    #得到根节点
            while p:
                if key<p.data: #如果插入的值小于根节点,写入左孩子
                    if p.lchild:    #如果根节点有左孩子,继续向下查找
                        p=p.lchild
                    else:
                        p.lchild=Btreenode(key) #如果没由左孩子,创建左孩子
                        break
                elif  key>p.data:#如果插入的值大于根节点,写入右孩子
                    if p.rchild: 
                        p=p.rchild #如果根节点有右孩子,继续向下查找
                    else:
                        p.rchild=Btreenode(key) #如果没由右孩子,创建右孩子
                        break
                else:
                    break
    def query(self,key):
        p=self.root
        while p:
            if key<p.data:#查找值跟根节点对比,小于根节点向左孩子查找
                p=p.lchild
            elif key>p.data:#查找值跟根节点对比,大于根节点向右孩子查找
                p=p.rchild
            else:
                return True
        return False
    def travese(self):
        def in_order(root):#二叉搜索树采用中序排序,结果是一个升序的排序结果
            if root:
                in_order(root.lchild)
                print(root.data,end='')
                in_order(root.rchild)
        in_order(self.root)
tree=BTS([4,5,6,7,1,2,8,9])
tree.travese()
print(tree.query(5))

 

posted on 2019-07-09 18:41  赏孤舟蓑笠  阅读(368)  评论(0编辑  收藏  举报