数据结构第07章-树和二叉树课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构第07章-树和二叉树课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 07 二叉 课件
- 资源描述:
-
1、数据结构(数据结构(C+版)版)n 第1章 绪论 第2章 线性表 第3章 排序 第4章 串 第5章 栈与队列 第6章 数组和广义表 第7章 树和二叉树 第8章 查找 第9章 图 第10章 综合应用设计第7章 树和二叉树 7.1 树 7.2 二叉树 7.3 二叉树类 7.4 线索二叉树 7.5 堆排序数据结构(C+版)叶核亚7.1 树7.1.1 树的定义7.1.2 树的术语7.1.3 树的表示方法数据结构(C+版)叶核亚7.1.1 树的定义树(tree)是由n(n0)个结点组成的有限集合。n=0的树称为空树;对n0的树T,有:有一个特殊的结点称为根结点(root),它只有直接后继结点,没有直接前
2、驱结点。当n1时,除根结点之外的其他结点分为m(m0)个互不相交的集合T1,T2,Tm,其中每个集合Tm(1im)本身又是一棵结构与树类同的子树(subtree)。每棵子树的根结点有且仅有一个直接前驱结点,但可以有零或多个直接后继结点。AGHDEJCBIF(a)n=0空树(b)n=1树中只有一个根结点Arootrootlevel=1level=2level=3depth=3(c)n=10,度为3的树数据结构(C+版)叶核亚7.1.2 树的术语1结点2孩子结点与双亲结点3兄弟结点4祖先结点与后代结点5结点的度6叶子结点与分支结点7树的度8边9路径与路径长度10结点的层次11树的深度或高度12无序
3、树与有序树13森林数据结构(C+版)叶核亚7.1.3 树的表示方法1.图示法2.树的广义表形式表示图7-2c所示树的广义表表示形式为:A(B(E,F),C(G),D)H,I,J)数据结构(C+版)叶核亚7.2 二叉树7.2.1 二叉树的定义7.2.2 二叉树的性质7.2.3 二叉树的抽象数据类型 7.2.4 二叉树的遍历7.2.5 二叉树的存储结构7.2.6 树与二叉树的转换数据结构(C+版)叶核亚7.2.1 二叉树的定义1二叉树的递归定义二叉树(binary tree)是n(n0)个结点组成的有限集合。n=0时称为空二叉树;n0的二叉树由一个根结点和两棵互不相交的、分别称为左子树和右子树的子
4、二叉树构成。数据结构(C+版)叶核亚2二叉树的基本形态图7-5 3个结点树与二叉树的基本形态数据结构(C+版)叶核亚7.2.2 二叉树的性质1性质1若根结点的层次为1,则二叉树第i层的结点数目最多为2i-1(i1)。2性质2在深度为k的二叉树中,至多有2k-1个结点(k0)。3性质3二叉树中,若叶子结点数为n0,2度结点数为n2,则有n0=n2+1。数据结构(C+版)叶核亚4满二叉树与完全二叉树5性质4如果一棵完全二叉树有n个结点,则其深度。6性质5若将一棵具有n个结点的完全二叉树按顺序表示,对于编号为i(1in)的结点,有如下特点:若i=1,则i为根结点,无双亲;若i1,则i的双亲是编号为i
5、/2的结点。若2in,则i的左孩子是编号为2i的结点;若2in,则i无左孩子。若2i+1n,则i的右孩子是编号为2i+1的结点;若2i+1n,则i无右孩子。数据结构(C+版)叶核亚7.2.3 二叉树的抽象数据类型 1.二叉树的数据元素 二叉树的结点集合,每个结点由数据元素和构造数据元素之间关系的指针组成。1.二叉树的基本操作创建一棵二叉树。撤销二叉树。遍历二叉树。查找:在一棵二叉树中查找关键字满足给定条件的结点。插入结点:若当前结点非空,插入新结点作为当前结点的左(或右)孩子结点,当前结点的原左(或右)孩子结点成为新结点的左(或右)孩子结点。删除子树:若当前结点非空,删除当前结点的左(或右)子
6、树。数据结构(C+版)叶核亚7.2.4 二叉树的遍历1.遍历(traversal)二叉树就是按照一定规则和次序访问二叉树中的所有结点,并且每个结点仅被访问一次。所谓访问,是指对每一个结点的数据元素进行查阅、修改等操作。一次完整的遍历按照一种规则对二叉树中的结点产生一种线性次序。2.若规定对子树的访问按“先左后右”的次序进行,则遍历二叉树有3种次序:先根次序:访问根结点,遍历左子树,遍历右子树。中根次序:遍历左子树,访问根结点,遍历右子树。后根次序:遍历左子树,遍历右子树,访问根结点。数据结构(C+版)叶核亚按先根次序遍历二叉树的过程数据结构(C+版)叶核亚7.2.5 二叉树的存储结构1.二叉树
7、的顺序存储结构数据结构(C+版)叶核亚2二叉树的链式存储结构 CAB E G D leftrightdataroot(a)二叉树(b)链式存储结构ABCDEG数据结构(C+版)叶核亚7.2.6 树与二叉树的转换1树转化为二叉树2二叉树还原为树数据结构(C+版)叶核亚7.3 二叉树类7.3.1 二叉树的结点类 7.3.2 二叉树类的设计与实现 7.3.3 建立二叉树的算法设计 7.3.4 二叉树遍历的非递归算法7.3.5 按层次遍历二叉树数据结构(C+版)叶核亚7.3.1 二叉树的结点类 class TreeNode1 /二叉树的结点类 public:char data;/数据元素域 TreeN
8、ode1*left,*right;/指向左、右孩子结点的指针域 TreeNode1(char ch=?);/构造二叉树的结点 TreeNode1()/析构函数为空 void preorderChild(TreeNode1*p);/先序遍历以p为根的子树 void inorderChild(TreeNode1*p);/中序遍历以p为根的子树 void postorderChild(TreeNode1*p);/后序遍历以p为根的子树;数据结构(C+版)叶核亚3按先根次序遍历二叉树的递归算法若二叉树为空,返回;否则,继续。从根结点开始,访问当前结点。按先根次序遍历当前结点的左子树。按先根次序遍历当前
9、结点的右子树。void TreeNode1:preorderChild(TreeNode1*p)/先序遍历以p为根的子树 if(p!=NULL)coutdataleft);preorderChild(p-right);数据结构(C+版)叶核亚4按中根次序遍历二叉树的递归算法 void TreeNode1:inorderChild(TreeNode1*p)/中序遍历以p为根的子树 if(p!=NULL)inorderChild(p-left);coutdataright);数据结构(C+版)叶核亚5按后根次序遍历二叉树的递归算法 void TreeNode1:postorderChild(Tre
10、eNode1*p)/后序遍历以p为根的子树 if(p!=NULL)postorderChild(p-left);postorderChild(p-right);coutdata;数据结构(C+版)叶核亚7.3.2 二叉树类的设计与实现 1二叉树类的声明类#include TreeNode1.h /二叉树的结点类class Tree1 /二叉树类 public:TreeNode1*root;/指向根结点的指针 Tree1(char*str=);Tree1();TreeNode1*create(char*str);/以标明空子树的先序遍历序列构建二叉树 void destroy(TreeNode1
11、*p);/撤销二叉树 void preorder();/先序遍历二叉树 void inorder();/中序遍历二叉树 void postorder();/后序遍历二叉树;数据结构(C+版)叶核亚2按3种次序遍历二叉树的成员函数 void Tree1:preorder()/先序遍历二叉树 coutpreorderChild(root);/调用TreeNode1类先序遍历二叉树的递归函数 coutendl;void Tree1:inorder()/中序遍历二叉树 coutinorderChild(root);/调用TreeNode1类中序遍历二叉树的递归函数 coutendl;void Tree
12、1:postorder()/后序遍历二叉树数据结构(C+版)叶核亚3.以标明空子树的先根次序遍历序列建立二叉树建立一棵二叉树必须明确以下两点:结点与双亲结点及孩子结点间的层次关系。兄弟结点间的左右子树的顺序关系。AB.(a)AB.AFDBCHEG.(d)ABD.G.CE.FH.AB.ABC.(b)A.B.(c)AB.C.数据结构(C+版)叶核亚以标明空子树的先根次序遍历序列建立二叉树算法 Tree1:Tree1(char*str)/构造函数 root=NULL;if(str!=)cout创建二叉树:endl;root=create(str);coutleft=NULL&p-right=NULL
13、)/叶子结点 n0+;if(p-left!=NULL&p-right!=NULL)/2度结点 n2+;property3(p-left,n0,n2);property3(p-right,n0,n2);数据结构(C+版)叶核亚7.3.3 建立二叉树的算法设计 以标明空子树的先根次序遍历序列建立二叉树1.建立链式存储结构的完全二叉树2.按先根和中根次序遍历序列建立二叉树3.以广义表表示建立二叉树数据结构(C+版)叶核亚7.3.4 二叉树遍历的非递归算法1.二叉树中根次序遍历的非递归算法描述如下:设置一个栈状态为空。从二叉树的根结点p开始,如果p不空或栈不空时,循环执行以下操作,直到走完二叉树且栈为
展开阅读全文