查找
个人笔记,侵删
折半查找又称二分查找。
他必须要求顺序存储结构,并且要求有序。
int Search_Bin(SSTable ST,KeyType key)
{
low=1;
high=ST.length;
while(low<=high)
{
mid=(low+high)/2;
if(ST.R[mid].key==key) return mid;
else if(ST.R[mid]>key) high=mid-1;
else low=mid+1;
}
return 0;
}
二叉排列树
二叉排序树的特点:所有的左子树都小于根节点,所有的右子树都大于根节点,并且,子树也是一棵二叉排序树。
声明
typedef struct
{
KeyType key; //关键字域
InfoType otherInfo; //其他数据项
}ElemType;
typedef strcut BSTnode;
{
ElemType data;
struct BSTnode *lchild,*rchild;
}BSTndoe,*BSTree;
插入
void InsertBST(BSTree &T,ElemType e)
{
if(!T)
{
BSTree S=new BSTree;
S->data=e;
S->lchild=S->rchild=NULL;
T=S;
}
else if(e.key>T->data.key) InsertBST(T->rchild,e);
else InsertBST(T->lchild,e);
}
创建
void CreatBST(BSTree &T)
{
T=NULL;
cin>>e;
while(e.key!=ENDFLAG)
{
InsertBST(T,e);
cin>>e;
}
}
平衡二叉树
二叉排序树的查找性能取决于二叉排序树结构,而二叉树的形状取决于数据集
如果有序那么查找时间复杂度为O ( n )如果结构合理查找的时间复杂度为O(log2n),事实上,树的高度越小,查找越快。 因此,提出了平衡二叉树,又称AVL树。
平衡二叉树或者是一棵空树,具有下面的特点:
(1)左右子树深度之差的绝对值不超过1
(2)左右子树也是平衡二叉树
平衡二叉树的平衡调整方法
很明显的,但把一棵树构造成一棵平衡二叉树,有利于查找的效率
那么如何将一个非平衡二叉树转换成一棵平衡二叉树:
若将二叉树上结点的平衡因子(Balance F a ctor, BF)定义为该结点左子树和右子树的深度之
差,则平衡二叉树上所有结点的平衡因子只可能觅-1、0和1。只要二叉树上有一个结点的平衡
因子的绝对值大于1 , 则该二叉树就是不平衡的
B树中的M阶是什么含义?
B树的背景
二次探测法
待续。。。(2021/1/16)