1 / 27

数据结构

数据结构. 中央广播电视大学开放教育试点课程. 辅导教师 孙文柱. 数据结构. 第一章 绪论 第二章 线性表 第三章 稀疏矩阵和广义表 第四章 栈和队列 第五章 树和二叉树 第六章 二叉树的应用 第七章 图 第八章 查找 第九章 排序. 树和二叉树 树的概念. 第五章. 二叉树的概念. 树和二叉树的性质. 存储结构和运算. 空树. 只含根结点. 左右子树均不为空树. N. 左子树为空. 右子树为空. N. N. N. L. R. R. L. 二叉树的五种基本形态:. 结点结构 :.

Download Presentation

数据结构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数据结构 中央广播电视大学开放教育试点课程 辅导教师 孙文柱

  2. 数据结构 第一章 绪论 第二章 线性表 第三章 稀疏矩阵和广义表 第四章 栈和队列 第五章 树和二叉树 第六章 二叉树的应用 第七章 图 第八章 查找 第九章 排序

  3. 树和二叉树 树的概念 第五章 二叉树的概念 树和二叉树的性质 存储结构和运算

  4. 空树 只含根结点 左右子树均不为空树 N 左子树为空 右子树为空 N N N L R R L 二叉树的五种基本形态:

  5. 结点结构: left data right A   B D    C E   F 二叉链表 root

  6. 先右后左的遍历算法 RLD RDL DRL 先(根)序的遍历算法 DLR 中(根)序的遍历算法 LDR 后(根)序的遍历算法 LRD

  7. 层次遍历序列: A C B D F E I G H A, B, C, D, E, F, G, H, I

  8. 前序遍历递归算法 void Preorder(BTreeNode* BT) { if(BT!=NULL) { cout<<BT->data<<' '; //D访问根结点 Preorder(BT->left); //L遍历左子树 Preorder(BT->right); //R遍历右子树 } }

  9. 由二叉树的先序和中序序列建树 先序序列 根 左子树 右子树 中序序列 左子树 根 右子树

  10. 建立二叉树 以字符串的形式定义一棵二叉 树 采用广义表表示的输入法定义 一棵二叉树

  11. A B C E D F G 二叉链表 (孩子-兄弟)存储 A root B C D A B C E D F G E F G

  12. 树的遍历 树的遍历可有三条搜索路径: 先根(次序)遍历: 后根(次序)遍历: 按层次遍历:

  13. A B C D E F G H I J K E B D F C G A H q GT K J I H G F E D 按层遍历树 C B A

  14. 二叉树的应用 第六章 二叉搜索树 堆 哈夫曼

  15. 二叉搜索树的定义 1.定义 2.查找算法 3.插入算法 4.删除算法 5.查找性能的分析

  16. 二叉链表作为 二叉搜索树的存储结构 struct BTreeNode { ElemType data; BTreeNode * left; BTreeNode * right; };

  17. 二叉搜索树的插入算法 • “插入”操作在查找不成功时才 进行; • 若二叉搜索树为空树,则新插入的结点为根结点;否则,新插入的结点必为一个叶子结点,其插入位置由查找过程得到。

  18. (1)被删除的结点是叶子; (2)被删除的结点只有左子树 或者只有右子树; (3)被删除的结点既有左子树, 也有右子树。 二叉搜索树的删除算法 可分三种情况讨论:

  19. (1)被删除的结点是叶子结点 其双亲结点相应指针域改为“空” (2)被删除的结点只有单支子树 其双亲结点的相应指针域改为 “指向被删除结点的左子树或 右子树”。

  20. p p 右子树为空只需重接它的左子树 s=p->left; p->left =q ; delete(s); s=p->right; p->right=q ; delete(s); q q

  21. p p 左子树为空只需重接它的右子树 s=p->left; p->left =q ; delete(s); s=p->right; p->right=q ; delete(s); q q

  22. (3)被删除的结点有左右子树 以其前驱替代之,然后再删除该前驱结点 前驱结点 被删结点 左子树中“最右下”的结点 (左指针可能不为空)

  23. (3)被删除的结点有左右子树 以其后继替代之,然后再删除 后继结点 右子树中“最左下”的结点 (左指针可能不为空)

  24. 堆是满足下列性质的数列{r1, r2, …,rn}: 或 (小顶堆) (大顶堆) 对于完全二叉树r2i是 ri的左孩子 r2i+1是 ri的右孩子

  25. 堆的顺序存储类型 struct Heap { ElemType heap[HeapMaxSize] ; int size; }; // HeapMaxSize 事先定义的 全局常量

  26. 两个问题: 如何“建堆”? 完全二叉树 如何“筛选”? 调整为堆

  27. 哈夫曼树 • 最优树的定义 • 如何构造最优树

More Related