基于树的查找算法

一、二叉排序树

1.二叉排序树性质

首先二叉排序树也是一棵二叉树,所谓二叉树,就是“任何节点最多只允许两个子节点”,这两个子节点称为左右子节点。

(1)、就是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 
(2)、若它的右子树不空,则右子树上所有节点的值均大于其根节点的值。 

(3)、换句话说就是:任何节点的键值一定大于其左子树中的每一个节点的键值,并小于其右子树中的每一个节点的键值。 

2.二叉排序树的查找原理

因为二叉排序树是可以看作是一个有序表,所以其查找过程和折半查找类似。 
算法思想: 
首先将待查关键字key与根节点关键字t进行比较: 
a.如果key = t, 则返回根节点指针。 
b.如果key < t,则进一步查找左子树。 
c.如果key > t,则进一步查找右子树。 

3.核心代码

    public boolean searchBST(int key){  
        Node current = root;  
        while(current != null){  
            if(key == current.getValue())  
                return true;  
            else if(key < current.getValue())  
                current = current.getLeft();  
            else  
                current = current.getRight();  
        }  
        return false;  
    } 

4.平均查找长度

   最差与顺序查找相同:ASL = (n+....+2+1)/n= (n+1)/2

   最好和折半查找相同:ASL = log2(n)

二、平衡二叉树

1.平衡二叉树性质

     平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。

三、B树

1.B树的性质

一棵m阶的B树满足下列条件:

树中每个结点至多有m个孩子。

除根结点和叶子结点外,其它每个结点至少有m/2个孩子。

根结点至少有2个孩子(如果B树只有一个结点除外)。

所有叶结点在同一层,B树的叶结点可以看成一种外部节点,不包含任何信息。

有k个关键字(关键字按递增次序排列)的非叶结点恰好有k+1个孩子。



猜你喜欢

转载自blog.csdn.net/qq_32899201/article/details/80787257
今日推荐