• 数据结构:二叉树搜索树(八)


    一、二叉搜索树

    二、二叉搜索树初步操作

    1、创建

    class BiTreeNode:
        def __init__(self,data):
            self.data = data
            self.lchild =None
            self.rchild = None
    
    
    class BST:
        def __init__(self,li=None):
            self.root = None
            if li:
                self.root = self.insert(self.root,li[0])
                for val in li[1:]:
                    self.insert(self.root,val) 

    2、遍历

    for i in [1,5,9,8,7,6,4,3,2]:
        tree.insert_no_rec(i)
    tree.in_order(tree.root)
    print(tree.query_no_rec(12))

    中序序列是直接排好序的

    三、二叉树的查询、插入、删除

    1、查询

        def query(self,root,val):
            if not root:
                return False
            if root.data == val:
                return False
            elif root.data > val:
                return self.query(root.lchild, val)
            else:
                return self.query(root.rchild,val)
    
        def query_no_rec(self,val):
            p = self.root
            while p:
                if p.data == val:
                    return True
                elif p.data > val:
                    p = p.lchild
                else:
                    p = p.rchild
            return False

    2、插入

    class BiTreeNode:
        def __init__(self,data):
            self.data = data
            self.lchild =None
            self.rchild = None
    
    
    class BST:
        def __init__(self,li=None):
            self.root = None
            if li:
                self.root = self.insert(self.root,li[0])
                for val in li[1:]:
                    self.insert(self.root,val)
        def insert(self,root,val):
            if root is None:
                root = BiTreeNode(val)
            elif val < root.data:
                root.lchild = self.insert(root.lchild,val)
            else:
                root.rchild = self.insert(root.rchild,val)
            return root
        def insert_no_rec(self,val):
            p = self.root
            if not p:
                self.root = BiTreeNode(val)
                return
            while True:
                if val < p.data:
                    if p.lchild:
                        p = p.lchild
                    else:
                        p.lchild = BiTreeNode(val)
                        break 

    3、删除

    动画演示地址:https://visualgo.net/en/bst

    四、二叉搜索树的问题

    1、随机化的二叉树搜索树

    1、对列表先随机打乱

    2、软后在建树

    2、avl树

    五、B-tree

     MYSQL的数据库索引用的就是B-Tree索引

    六、二叉搜索树代码测试

    1、测试

    1、实现代码

    class BiTreeNode:
        def __init__(self,data):
            self.data = data
            self.lchild = None
            self.rchild = None
    
    
    class BST:
        def __init__(self,li=None):
            self.root = None
            if li:
                self.root = self.insert(self.root,li[0])
                for val in li[1:]:
                    self.insert(self.root,val)
        def insert(self,root,val):
            if root is None:
                root = BiTreeNode(val)
            elif val < root.data:
                root.lchild = self.insert(root.lchild,val)
            else:
                root.rchild = self.insert(root.rchild,val)
            return root
        def insert_no_rec(self,val):
            p = self.root
            if not p:
                self.root = BiTreeNode(val)
                return
            while True:
                if val < p.data:
                    if p.lchild:
                        p = p.lchild
                    else:
                        p.lchild = BiTreeNode(val)
                        break
                else:
                    if p.rchild:
                        p = p.rchild
                    else:
                        p.rchild = BiTreeNode(val)
                        break
    
        def query(self,root,val):
            if not root:
                return False
            if root.data == val:
                return False
            elif root.data > val:
                return self.query(root.lchild, val)
            else:
                return self.query(root.rchild,val)
    
        def query_no_rec(self,val):
            p = self.root
            while p:
                if p.data == val:
                    return True
                elif p.data > val:
                    p = p.lchild
                else:
                    p = p.rchild
            return False
    
        def in_order(self,root):
            if root:
                self.in_order(root.lchild)
                print(root.data,end=',')
                self.in_order(root.rchild)
    
    
    tree = BST()
    for i in [1,5,9,8,7,6,4,3,2]:
        tree.insert_no_rec(i)
    tree.in_order(tree.root)
    print(tree.query_no_rec(12))

    2、输出

    "C:Program FilesPython35python.exe" E:/工作目录/python/test/B-tree.py
    1,2,3,4,5,6,7,8,9,False
    
    Process finished with exit code 0

    2、不打印结果

    1、实现代码

    #print(tree.query_no_rec(12))

    2、输出

    "C:Program FilesPython35python.exe" E:/工作目录/python/test/B-tree.py
    1,2,3,4,5,6,7,8,9,
    Process finished with exit code 0
    

      

  • 相关阅读:
    Mybatis3.2和Spring3.x整合----Myb…
    Mybatis3.2和Spring3.x整合----Myb…
    支持向量分类方法
    KKT了解
    机器学习实战笔记 logistic回归
    朴素贝叶斯进行分类
    决策树算法实现
    KNN算法
    Spring AOP中增强知识
    Java动态代理知识
  • 原文地址:https://www.cnblogs.com/luoahong/p/9719441.html
Copyright © 2020-2023  润新知