数据结构第6讲树.pptVIP

  • 3
  • 0
  • 约3.31万字
  • 约 95页
  • 2017-06-05 发布于湖北
  • 举报
第六章 树 6.1树的基本概念 树的基本概念 树的定义 树的定义 树的定义及特点 3.树的基本术语 树的基本术语 树的基本术语 树的抽象数据类型 树的抽象数据类型 树的抽象数据类型 6.1.2树的性质 树的性质 树的性质 6.2 二叉树 二叉树的定义 2.二叉树的抽象数据类型 二叉树的抽象数据类型 二叉树的抽象数据类型 6.2.2二叉树的性质 二叉树的性质 二叉树的性质 二叉树的性质 二叉树的性质 二叉树的性质 第六章习题(1) 6.2.3二叉树的存储结构 顺序存储结构 二叉树的存储结构 链式存储结构 建立二叉链表 建立二叉链表 建立二叉链表 6.3二叉树的遍历 二叉树的遍历 遍历的递归算法 6.3.2二叉树遍历算法的非递归形式 前序非递归遍历 2.中序遍历二叉树的非递归算法 中序非递归遍历 3.后序遍历二叉树的非递归算法 后序非递归遍历 后序非递归遍历 5.按层次遍历二叉树 按层次遍历 6.3.3遍历算法的应用 遍历算法的应用 3.求二叉树的深度 求二叉树的深度 求二叉树的深度 4.表达式求值 表达式求值 6.4线索二叉树 二叉树的线索化 二叉树的线索化 6.4.2建立线索二叉树 求前驱、后继 6.4.3线索二叉树的遍历 线索二叉树的遍历 6.4.4线索二叉树的更新 第六章习题(2) 6.5树和森林 双亲表示法 2.孩子表示法 孩子表示法 3)孩子链表示法 孩子链表示法 3.孩子-兄弟表示法(或二叉树表示法) 6.5.2森林和二叉树的转换 2.森林F转换成二叉树BT(F?BT) 3.二叉树BT恢复成森林F(BT?F) 6.5.3树和森林的遍历 2.后根遍历树T 3.先序遍历森林F 4.后序遍历森林F 6.6二叉树应用举例 2.树的路径长度 Huffman树(或H树) Huffman树(或H树) Huffman树 Huffman树 构造H树的C语言算法 构造H树的C语言算法 构造H树 6.5.2Huffman编码及译码 Huffman编码及译码 Huffman编码 Huffman编码 Huffman编码 2.Huffman译码 Huffman译码 第六章习题(3) 上机题4 第六章小结 若说明:Ptree pt,则pt为双亲表示法时的存储,pt.nodes[i].data为树中第i节点的数据值,而pt.nodex[i].parent为第i节点的双亲节点之序号。 例6-20 设树T如图6.36: A D F G C 1 2 3 4 5 6 7 8 9 B E H I 5 I 5 H 3 G 2 F 2 E 2 D 1 C 1 B 0 A parent data pt.nodes[1] 2 3 4 5 6 7 8 9 10 … 这种表示法利用了每节点(除根外)只有唯一双亲的性质,故查找某节点的双亲很方便。但确定某节点的孩子节点需遍历整个树的存储空间。如确定例6-20中节点E的孩子,因“E”的序号(或下标)为5,扫描整个数组空间,查找出parent域为5的那些节点,即是“E”的孩子节点。 该表示法是采用链表结构来存储树的信息。 1)固定指针数表示法:设树T的度为d(d叉树),即树中任一节点最多发出d个分支,所以节点定义为: 其中chi(1≤i≤d)为本节点第i个孩子节点的指针。 例6-21 设树T如图6.37所示。因为此树的度为4,所以给每个节点分配4个指针域,其存储结构如图所示。 data ch1 …… chd A B C D E F G G ^ ^ ^ ^ D ^ ^ ^ ^ E ^ ^ ^ ^ F ^ ^ ^ ^ C ^ ^ ^ ^ B A ^ ^ T 用固定指针数表示一棵树时,若树中节点数为n,非空指针数仅为n-1,而空指针数为nd-(n-1)=n(d-1)+1,显然当d很大时,是存储空间的浪费。 图6.37 2)可变指针数表示法 节点形式: 其中d为本节点的出度,chi为第i个孩子节点的指针。此表示法中,节点的指针数随其出度而定,如对例6-21中的树T,存储结构如图6.38: data ch1 …… chd d A B C D E F G C 0 A 2 T D 0 E 0 F 0 G 0 B 4 但此表示法其节点不规范,故给节点的描述及树的运算带来不便。 该表示法将树中每一节点的诸孩子组成单链表,若树中节点数为n,则有n个孩子链表。 头节点形式: 其中data域存放节点的数据值;parent域为该节点之父节点的序号;fchild为指向本节点第一个孩子的指针。 链表节点形式: 其中child为某孩子节点的序号,而next指向该子的右兄弟。 节点描述如下:typedef struct node //链表节点

文档评论(0)

1亿VIP精品文档

相关文档