目录

  • 1 绪论
    • 1.1 数据结构的定义和基本术语
    • 1.2 数据的逻辑结构和存储结构
    • 1.3 算法和算法分析
  • 2 线性表
    • 2.1 线性表的定义及逻辑结构
    • 2.2 顺序存储结构
    • 2.3 链式存储结构
    • 2.4 应用:一元多项式的表示和相加
  • 3 栈和队列
    • 3.1 栈
    • 3.2 队列
  • 4 串
    • 4.1 资源
  • 5 数组
    • 5.1 数组
    • 5.2 广义表
  • 6 树和二叉树
    • 6.1 树的定义和基本术语
    • 6.2 二叉树
    • 6.3 遍历二叉树和线索二叉树
    • 6.4 树和森林
    • 6.5 哈夫曼树及其应用
  • 7 图
    • 7.1 图的定义和基本术语
    • 7.2 图的存储结构
    • 7.3 图的遍历
    • 7.4 图的应用
  • 8 查找
    • 8.1 查找的基本概念
    • 8.2 基于线性表的查找
    • 8.3 基于树的查找
    • 8.4 哈希表
  • 9 内部排序
    • 9.1 排序的定义和种类
    • 9.2 插入排序
    • 9.3 B-树和B+树
    • 9.4 交换排序
    • 9.5 选择排序
    • 9.6 归并排序和基数排序
  • 10 实验
    • 10.1 目的要求
      • 10.1.1 参考代码
基于树的查找

基于树的查找是将待查表组织成特定树的形式并在树结构上实现查找的方法,主要包括二叉排序树(binary sort tree)、平衡二叉树(balanced binary tree)和B-树等。

1二叉排序树的定义

二叉排序树或者是一棵空树;或者是具有如下特性的二叉树:

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

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

3)它的左、右子树也都分别是二叉排序树。

这是一个递归定义。由定义可以得出二叉排序树的一个重要性质;中序遍历一个二叉排序树时可以得到一个非递减有序序列。

2二叉排序树的查找

从其定义可见,二叉排序树的查找过程为:

1)若二叉排序树为空,查找失败。

2)若二叉排序树非空,将给定值k与二叉排序树的根结点的关键字比较。

3)若相等,查找成功,结束查找过程,否则,

    a当给k小于根结点的关键字,则继续在左子树上进行查找,转1)。

b当给k大于根结点的关键字,则继续在右子树上进行查找,转2)。

显然,这是一个递归过程。可用如下递归算法实现

3)二叉排序树的插入

根据动态查找表的定义“插入”操作在查找不成功时才进行;若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程得到。

插入一个结点的过程为:设待插入结点的关键码为k,则 

1)若二叉排序树是空树,则k成为二叉排序树的根;

2)若二叉排序树非空,则将k与二叉排序树的根进行比较,如果k的值等于根结点的值,则停止插入;如果k的值小于根结点的值,则将k插入左子树;如果k的值大于根结点的值,则将k插入右子树。

构造一棵二叉排序树则是逐个插入结点的过程。