数据结构(本科)辅导2

数据结构(本科)辅导2

ID:38179537

大小:109.00 KB

页数:7页

时间:2019-06-07

数据结构(本科)辅导2_第1页
数据结构(本科)辅导2_第2页
数据结构(本科)辅导2_第3页
数据结构(本科)辅导2_第4页
数据结构(本科)辅导2_第5页
资源描述:

《数据结构(本科)辅导2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第6章树和二叉树树是一种重要的非线性结构,从逻辑角度看,其数据元素之间体现的是一对多的非线性关系,一切具有层次关系的问题都可以用树来描述。一、相关术语树、二叉树、树根、子树、有序树、无序数、森林、终端结点(叶子)、非终端结点、结点的度、结点的层次、树的深度、满二叉树、完全二叉树、理想二叉树、孩子、双亲、左孩子、右孩子、先序遍历、中序遍历、后序遍历、层次遍历、哈夫曼树、最优二叉树、路径、路径长度、权、带权路径长度、哈夫曼编码。二、树的概念树的定义树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两

2、个条件:(1)有且仅有一个特定的称为根(Root)的结点;(2)其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree)。      注意:树的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树又可由若干棵更小的子树构成。三、二叉树的定义二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。(1)二叉树与无序树不同二叉树中,

3、每个结点最多只能有两棵子树,并且有左右之分。 二叉树并非是树的特殊情形,它们是两种不同的数据结构。(2)二叉树与度数为2的有序树不同在有序树中,虽然一个结点的孩子之间是有左右次序的,但是若该结点只有一个孩子,就无须区分其左右次序。而在二叉树中,即使是一个孩子也有左右之分。四、二叉树的存储结构(一)顺序存储结构该方法是把二叉树的所有结点按照一定的线性次序存储到一片连续的存储单元中。结点在这个序列中的相互位置还能反映出结点之间的逻辑关系。1.完全二叉树结点编号(1)编号办法 在一棵n个结点的完全二叉树中,从树根起,自上层到下层,每层从左至右

4、,给所有结点编号,能得到一个反映整个二叉树结构的线性序列。  【例】如下图所示。(2)编号特点 完全二叉树中除最下面一层外,各层都充满了结点。每一层的结点个数恰好是上一层结点个数的2倍。从一个结点的编号就可推得其双亲,左、右孩子,兄弟等结点的编号。假设编号为i的结点是ki(1≤i≤n),则有:  ①若i>1,则ki的双亲编号为[i/2];若i=1,则Ki是根结点,无双亲。  ②若2i≤n,则Ki的左孩子的编号是2i;否则,Ki无左孩子,即Ki必定是叶子。因此完全二叉树中编号i>[n/2]的结点必定是叶结点。  ③若2i+1≤n,则Ki的

5、右孩子的编号是2i+1;否则,Ki无右孩子。  ④若i为奇数且不为1,则Ki的左兄弟的编号是i-1;否则,Ki无左兄弟。  ⑤若i为偶数且小于n,则Ki的右兄弟的编号是i+1;否则,Ki无右兄弟。2.完全二叉树的顺序存储将完全二叉树中所有结点按编号顺序依次存储在一个向量bt[0..n]中。其中:bt[1..n]用来存储结点bt[0]不用或用来存储结点数目。 【例】下表是上图的完全二叉树的顺序存储结构,bt[0]为结点数目,b[7]的双亲、左右孩子分别是bt[3]、bt[l4]和bt[15]。3.一般二叉树的顺序存储(1)具体方法  ①将

6、一般二叉树添上一些"虚结点",成为"完全二叉树"  ②为了用结点在向量中的相对位置来表示结点之间的逻辑关系,按完全二叉树形式给结点编号③将结点按编号存入向量对应分量,其中"虚结点"用"∮"表示【例】上图中单支树的顺序存储结构如下图(2)优点和缺点  ①对完全二叉树而言,顺序存储结构既简单又节省存储空间。  ②一般的二叉树采用顺序存储结构时,虽然简单,但易造成存储空间的浪费。【例】最坏的情况下,一个深度为k且只有k个结点的右单支树需要2k-1个结点的存储空间。  ③在对顺序存储的二叉树做插入和删除结点操作时,要大量移动结点。4.二叉树的顺

7、序存储结构类型定义【参见教材】(二)链式存储结构1.结点的结构二叉树的每个结点最多有两个孩子。用链接方式存储二叉树时,每个结点除了存储结点本身的数据外,还应设置两个指针域lchild和rchild,分别指向该结点的左孩子和右孩子。结点的结构为:2.结点的类型说明typedefcharDataType;/*用户可根据具体应用定义DataType的实际类型*/typedefstructnode{DataTypedata;Structnode*lchild,*rchild;/*左右孩子指针*/}BinTNode;/*结点类型*/typedef

8、BinTNode*BinTree;/*BinTree为指向BinTNode类型结点的指针类型*/3.二叉链表(二叉树的常用链式存储结构)在一棵二叉树中,所有类型为BinTNode的结点,再加上一个指向开始结

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。