数据结构复习指导之树形查找(二叉排序树和平衡二叉树)

文章目录

树形查找

 考纲内容

知识框架

复习提示

1.二叉排序树(BST)

1.1二叉排序树的定义

【命题追踪——二叉排序树的应用】

【命题追踪——二叉排序树中结点值之间的关系】

1.2二叉排序树的查找

1.3二叉排序树的插入

1.4二叉排序树的构造

【命题追踪——构造二叉排序树的过程】

1.5二叉排序树的删除

1.6二叉排序树的查找效率分析

2.平衡二叉树

2.1平衡二叉树的定义

【命题追踪——平衡二叉树的定义】

2.2平衡二叉树的插入

【命题追踪——平衡二叉树中插入操作的特点】

【命题追踪——平衡二叉树的插入及调整操作的实例】

1) LL平衡旋转(右单旋转)

2) RR 平衡旋转(左单旋转)

3) LR 平衡旋转(先左后右双旋转)

4) RL平衡旋转(先右后左双旋转)

【命题追踪——构造平衡二叉树的过程】

2.3平衡二叉树的删除

2.4平衡二叉树的查找

【命题追踪——指定条件下平衡二叉树的结点数的分析】


树形查找

 考纲内容

(一)查找的基本概念
(二)顺序查找法
(三)分块查找法
(四)折半查找法
(五)树形查找
           二叉搜索树;平衡二叉树;红黑树
(六)B树及其基本操作、B+树的基本概念
(七)散列(Hash)表
(八)查找算法的分析及应用

知识框架

数据结构复习指导之树形查找(二叉排序树和平衡二叉树)_第1张图片

复习提示

  • 本章是考研命题的重点。
  • 对于折半查找,应掌握折半查找的过程、构造判定树、分析平均查找长度等。
  • 对于二叉排序树、二叉平衡树和红黑树,要了解它们的概念、性质和相关操作等。
  • B 树和 B+树是本章的难点。对于B树,考研大纲要求掌握插入、删除和査找的操作过程;
  • 对于 B+树,仅要求了解其基本概念和性质。
  • 对于散列查找,应掌握散列表的构造、冲突处理方法(各种方法的处理过程)、查找成功和查找失败的平均查找长度、散列查找的特征和性能分析。

1.二叉排序树(BST)

构造一棵二叉排序树的目的并不是排序,而是提高查找、插入和删除关键字的速度,二叉排序树这种非线性结构也有利于插入和删除的实现。

1.1二叉排序树的定义

命题追踪——二叉排序树的应用

二叉排序树(也称二叉查找树)或者是一棵空树,或者是具有下列特性的二叉树:

1) 若左子树非空,则左子树上所有结点的值均小于根结点的值。

2) 若右子树非空,则右子树上所有结点的值均大于根结点的值。

3) 左、右子树也分别是一棵二叉排序树。

命题追踪——二叉排序树中结点值之间的关系

根据二叉排序树的定义,左子树结点值 < 根结点值 < 右子树结点值,因此对二叉排序树进行中序遍历,可以得到一个递增的有序序列。

例如,图7.4所示二叉排序树的中序遍历序列为 123468。

数据结构复习指导之树形查找(二叉排序树和平衡二叉树)_第2张图片

1.2二叉排序树的查找

二叉排序树的查找是从根结点开始,沿某个分支逐层向下比较的过程。

  • 若二叉排序树非空,先将给定值与根结点的关键字比较,若相等,则查找成功;
  • 若不等,若小于根结点的关键字,则在根结点的左子树上查找,否则在根结点的右子树上查找。

这显然是一个递归的过程。

二叉排序树的非递归查找算法:

BSTNode *BST_Search(BiTree T,ElemType key){
    while(T!=NULL&&key!=T->data){        //若树空或等于根结点值,则结束循环
        if(keydata) T=T->lchild;     //小于,则在左子树上查找
        else T=T->rchild;                //大于,则在右子树上查找
    }
    return T;
}

例如,在图7.4中查找值为4的结点。

  • 首先4与根结点6比较。由于4小于6,所以在根结点6的左子树中继续查找。
  • 由于4大于2,所以在结点2的右子树中查找,查找成功。

同样,二叉排序树的查找也可用递归算法实现,递归算法比较简单,但执行效率较低。

1.3二叉排序树的插入

二叉排序树作为一种动态树表,其特点是树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字值等于给定值的结点时再进行插入的。

插入结点的过程如下:

  • 若原二叉排序树为空,则直接插入;
  • 否则,若关键字k 小于根结点值则插入到左子树,
  • 若关键字k大于根结点值,则插入到右子树。
  • 插入的结点一定是一个新添加的叶结点,且是查找失败时的查找路径上访问的最后一个结点的左孩子或右孩子。

如图7.5所示在一棵二叉排序树中依次插入结点28和结点58,虚线表示的边是其查找的路径。

数据结构复习指导之树形查找(二叉排序树和平衡二叉树)_第3张图片

二叉排序树插入操作的算法描述如下:

int BST_Insert(BiTree &T,KeyType k){
    if(T==NULL){            //原树为空,新插入的记录为根结点
    T=(BiTree)malloc(sizeof(BSTNode));
    T->data=k;
    T->lchild=T->rchild=NULL;
    return 1;               //返回 1,插入成功
    }
    else if(k==T->data)     //树中存在相同关键字的结点,插入失败
        return 0;
    else if(kdata)      //插入T的左子树
        return BST_Insert(T->lchild,k);
    else                    //插入里的右子树
        return BST_Insert(T->rchild,k);
}

1.4二叉排序树的构造

你可能感兴趣的:(数据结构复习指导,数据结构,二叉排序树,平衡二叉树,树形查找)