数据结构课件C版.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构课件C版.pptx》由会员分享,可在线阅读,更多相关《数据结构课件C版.pptx(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023/3/17树 -树的定义和术语 树:一棵树 T,简称为树,它是n(n0)个结点的有限集合。当n=0时,T 称为空树;否则,T 是非空树,记作其中,r 是一个特定的称为根(root)的结点,它没有直接前驱;根以外的其他结点划分为 m(m 0)个互不相交的有限集合T1,T2,Tm,每个集合又是一棵树,并且称之为根的子树。第1页/共69页2023/3/17树 -树的定义和术语 相关术语子女:若结点的子树非空,结点子树的根即为该结点的子女。双亲:若结点有子女,该结点是子女双亲。兄弟:同一结点的子女互称为兄弟。度:结点的子女个数即为该结点的度;树中各个结点的度的最大值称为树的度。分支结点:度不为
2、0的结点即为分支结点,亦称为非终端结点。第2页/共69页2023/3/17树 -树的定义和术语 叶结点:度为0的结点即为叶结点,亦称为终端结点。祖先:某结点到根结点的路径上的各个结点都是该结点的祖先。子孙:某结点的所有下属结点,都是该结点的子孙。结点的层次:规定根结点在第一层,其子女结点的层次等于它的层次加一。以此类推。深度:结点的深度即为结点的层次;离根最远结点的层次即为树的深度。第3页/共69页2023/3/17树 -树的定义和术语 高度:规定叶结点的高度为1,其双亲结点的高度等于它的高度加一。树的高度:等于根结点的高度,即根结点所有子女高度的最大值加一。有序树:树中结点的各棵子树 T0,
3、T1,是有次序的,即为有序树。无序树:树中结点的各棵子树之间的次序是不重要的,可以互相交换位置。森林:森林是m(m0)棵树的集合。第4页/共69页2023/3/17树 -树的抽象数据类型教材 p118-120第5页/共69页2023/3/17二叉树-二叉树的定义 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。第6页/共69页2023/3/17二叉树-二叉树的性质 性质1 若二叉树结点的层次从 1 开始,则在二叉树的第 i(i1)层最多有 2i-1 个结点。证明用数学归纳法性质2 深度为 k(k0)的二叉树最少有 k 个
4、结点,最多有 2k-1个结点。证明:因为每一层最少要有1个结点,因此,最少结点数为 k。最多结点个数借助性质1用求等比级数前k项和的公式20+21+22+2k-1=2k-1第7页/共69页2023/3/17二叉树-二叉树的性质 性质3 对任何一棵二叉树,如果其叶结点有 n0 个,度为 2 的非叶结点有 n2 个,则有 n0n21证明:若设度为 1 的结点有 n1 个,总结点数为n,总边数为e,则根据二叉树的定义,n=n0+n1+n2 ,e=2n2+n1=n-1 因此,有 2n2+n1=n0+n1+n2-1则 n2=n0-1 n0=n2+1 第8页/共69页2023/3/17二叉树-二叉树的性质
5、 定义1 满二叉树(Full Binary Tree):深度为k的满二叉树是有2k-1个结点的二叉树。定义2 完全二叉树(Complete Binary Tree):若设二叉树的深度为 k,则共有 k 层。除第 k 层外,其它各层(1k-1)的结点数都达到最大个数,第k层从右向左连续缺若干结点,这就是完全二叉树。第9页/共69页2023/3/17二叉树-二叉树的性质 性质4 具有 n(n0)个结点的完全二叉树的深度为 log2(n+1)。证明:设完全二叉树的深度为k,则有2k-1-1 n 2k-1 即 2k-1 n+12k,取对数 k-1 1,则 i 的双亲为 i2;3)若2*i=n,则 i
6、的左子女为 2*i;4)若2*i+1 data)if(PreOrderTraverse(T-lchild,Visit)if(PreOrderTraverse(T-rchild,Visit)return OK;return ERROR;else return OK;/PreOrderTraverse第22页/共69页2023/3/17二叉树 -二叉树的遍历中序遍历二叉树T的非递归算法Status InOrderTraverse(BiTree T,Status(*Visit)(ElemType)/算法6.2.采用二叉链表存储结构,Visit是对数据元/素操作的应用函数。中序遍历二叉树T的非递归算/
7、法,对每个数据元素调用函数Visit。第23页/共69页2023/3/17二叉树 -二叉树的遍历 InitStack(S);Push(S,T);/根指针进栈 while(!StackEmpty(S)while(GetTop(S,p)&p)Push(S,p-lchild);Pop(S,p);/空指针退栈 if(!StackEmpty(S)/访问结点,向右一步 Pop(S,p);if(!Visit(p-data)return ERROR;Push(S,p-rchild);return OK;/InOrderTraverse第24页/共69页2023/3/17二叉树 -二叉树的遍历中序遍历二叉树T的
8、非递归算法Status InOrderTraverse(BiTree T,Status(*Visit)(ElemType)/算法6.3.采用二叉链表存储结构,Visit是对数据/元素操作的应用函数。中序遍历二叉树T的非递归/算法,对每个数据元素调用函数Visit。第25页/共69页2023/3/17二叉树 -二叉树的遍历 InitStack(S);p=T;while(p|!StackEmpty(S)if(p)Push(S,p);p=p-lchild;else Pop(S,p);if(!Visit(p-data)return ERROR;p=p-rchild;return OK;/InOrder
9、Traverse第26页/共69页2023/3/17二叉树 -以递归方式建立二叉树BiTree CreateBiTree(BiTree&T)/算法6.4 /按先序次序输入二叉树中结点的值(一个字/符),#字符表示空树,构造二叉链表表示的二/叉树T。第27页/共69页2023/3/17二叉树-以递归方式建立二叉树 char ch;scanf(%c,&ch);if(ch=#)T=NULL;else if(!(T=(BiTNode*)malloc(sizeof(BiTNode)return ERROR;T-data=ch;/生成根结点 CreateBiTree(T-lchild);/构造左子树 Cr
10、eateBiTree(T-rchild);/构造右子树 return T;/CreateBiTree第28页/共69页2023/3/17二叉树 例1:给定一棵二叉树的先序序列EBADCFHGIKJ和中序序列ABCDEFGHIJK,画出这颗二叉树。第29页/共69页2023/3/17二叉树 例2:给定一棵二叉树的中序序列DCBGEAHFIJK和后序序列DCEGBFHKJIA,画出这颗二叉树。第30页/共69页2023/3/17二叉树 例3:给定一棵二叉树的先序和后序序列不能确定一棵二叉树。第31页/共69页2023/3/17线索二叉树-线索二叉树的概念为什么提出线索二叉树?遍历的过程实质上是对一
11、个非线性结构进行线性化的操作,使每个结点(除第一个和最后一个)在这个线性序列中有且仅有一个直接前驱和直接后继。二叉树中只存储了左右孩子的信息,因此,前驱和后继的信息无法直接找到。就提出了线索二叉树的概念。又因为n个结点的二叉链表中有n+1个空链域,从而得到线索二叉树的存储结构如下。第32页/共69页2023/3/17线索二叉树-线索二叉树的概念规定:若结点有左子树,则lchild指示其左孩子,否则令lchild指示其前驱;若结点有右子树,则其rchild域指示其右孩子,否则令rchild指示其后继。为避免混淆,增加两个标志域:LTag为0(1)表示lchild指向左孩子(前驱),RTag为0(
12、1)表示rchild指向右孩子(后继)。第33页/共69页2023/3/17线索二叉树-线索二叉树的概念其中,指向结点前驱和后继的指针叫做线索。加上线索的二叉树称为线索二叉树。对二叉树以某种次序遍历使其变为线索二叉树的过程叫线索化。第34页/共69页2023/3/17线索二叉树-线索二叉树的概念第35页/共69页2023/3/17线索二叉树-二叉树的二叉线索存储表示typedef enum PointerTag Link,Thread;/Link=0:指针,Thread=1:线索typedef struct BiThrNod TElemType data;struct BiThrNode *l
13、child,*rchild;/左右指针 PointerTag LTag,RTag;/左右标志 BiThrNode,*BiThrTree;第36页/共69页2023/3/17线索化的实质是将二叉链表中的空指针改为指向前驱或后继的线索,而前驱和后继的信息只有在遍历时才能得到,因此线索化的过程即为在遍历的过程中修改空指针的过程。线索二叉树-通过中序遍历建立中序线索化二叉树第37页/共69页2023/3/17线索二叉树-通过中序遍历建立中序线索化二叉树Status InOrderThreading(BiThrTree&Thrt,BiThrTree T)/算法6.6 if(!(Thrt=(BiThrTr
14、ee)malloc(sizeof(BiThrNode)exit(OVERFLOW);Thrt-LTag=Link;Thrt-RTag=Thread;Thrt-rchild=Thrt;/右指针回指 if(!T)Thrt-lchild=Thrt;else Thrt-lchild=T;pre=Thrt;InThreading(T);/算法6.7 pre-rchild=Thrt;pre-RTag=Thread;Thrt-rchild=pre;return OK;/InOrderThreading第38页/共69页2023/3/17线索二叉树-通过中序遍历建立中序线索化二叉树void InThreadi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内