数据结构与算法教学课件ppt作者王曙燕chapter6树和二叉树PPT课件下载推荐.ppt
《数据结构与算法教学课件ppt作者王曙燕chapter6树和二叉树PPT课件下载推荐.ppt》由会员分享,可在线阅读,更多相关《数据结构与算法教学课件ppt作者王曙燕chapter6树和二叉树PPT课件下载推荐.ppt(115页珍藏版)》请在冰豆网上搜索。
,若D为空集,则称为空树。
否则:
(1)在D中存在唯一的称为根的数据元素root;
(2)当n1时,其余结点可分为m(m0)个互不相交的有限集T1,T2,Tm,其中每一个子集本身又是一棵符合本定义的树,称为根root的子树。
第6章树和二叉树,数据对象D:
D是具有相同特性的数据元素的集合。
5,例如:
第6章树和二叉树,A(B(E,F(K,L),C(G),D(H,I,J(M),T1,T3,T2,根,6.2树的概念,6,表示方法:
第6章树和二叉树,树型表示,6.2树的概念,7,表示方法:
第6章树和二叉树,文氏图表示,6.2树的概念,8,表示方法:
第6章树和二叉树,凹入表示,6.2树的概念,9,表示方法:
第6章树和二叉树,嵌套括号表示,a(b(d,e(i,j),c(g,h),6.2树的概念,10,有向树:
第6章树和二叉树,有确定的根;
树根和子树根之间为有向关系。
有序树:
子树之间存在确定的次序关系。
无序树:
子树之间不存在确定的次序关系。
6.2树的概念,11,树型结构和线性结构的结构特点,第6章树和二叉树,第一个数据元素(无前驱),根结点(无前驱),最后一个元素(无后继)。
多个叶子结点(无后继),其它数据元素(一个前驱、一个后继),其它数据元素(一个前驱、多个后继),6.2树的概念,12,第6章树和二叉树,基本术语,结点:
数据元素+若干指向子树的分支,结点的度:
分支的个数,树的度:
树中所有结点的度的最大值,叶子结点:
度为零的结点,分支结点:
度大于零的结点,(从根到结点的)路径:
由从根到该结点所经分支和结点构成。
6.2树的概念,13,数据结构,第6章树和二叉树,基本术语,孩子结点:
一个结点的直接后继,双亲结点:
一个结点的直接前驱,兄弟结点:
同一双亲结点的孩子结点之间互称。
堂兄弟、祖先结点、子孙结点,结点的层次:
假设根结点的层次为1,依次累加。
树的深度:
树中叶子结点所在的最大层次,森林:
是m(m0)棵互不相交的树的集合,6.2树的概念,14,第6章树和二叉树,基本操作,InitTree(Tree);
DestoryTree(Tree);
CreatTree(Tree);
TreeEmpty(Tree);
Root(Tree);
Parent(Tree,x);
FirstChild(Tree,x);
NextSibling(Tree,x);
InsertChild(Tree,p,Child);
DeleteChild(Tree,p,i);
6.2树的概念,15,第6章树和二叉树,定义:
满足以上两个条件的树型结构为二叉树。
每个结点的度都不大于2;
每个结点的孩子结点次序不能任意颠倒。
二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。
A,根结点,左子树,右子树,6.2树的概念,16,6.3二叉树,第6章树和二叉树,形态:
5种,17,6.3二叉树,第6章树和二叉树,基本操作:
Initiate(bt);
Destory(bt);
Creat(bt);
Empty(bt);
Root(bt);
Parent(bt,x);
LeftChild(bt,x);
RithtChild(bt,x);
Traverse(bt);
Clear(bt);
18,6.3二叉树,第6章树和二叉树,重要性质:
在二叉树的第i层上至多有2i-1个结点。
用归纳法证明:
.当i=1层时,只有一个根结点:
2i-1=20=1;
.假设i=k时成立,即第k层上至多有2k-1个结点;
.那么第k+1层上最多有2k-12个,即2k个。
结论成立,证毕。
19,6.3二叉树,第6章树和二叉树,重要性质:
深度为k的二叉树上至多含2k-1个结点(k1)。
证明:
基于上一条性质,深度为k的二叉树上的结点数至多为,20+21+2k-1,=2k-1,20,6.3二叉树,第6章树和二叉树,重要性质:
对任何一棵二叉树,若它含有n0个叶子结点、n2个度为2的结点,则必存在关系式:
n0=n2+1。
设二叉树上结点总数n=n0+n1+n2,又二叉树上分支总数b=n1+2n2,而b=n-1=n0+n1+n2-1,由此,n0=n2+1,21,6.3二叉树,第6章树和二叉树,特殊的二叉树,满二叉树,完全二叉树,深度为k且含有2k-1个结点的二叉树。
树中所含的n个结点和满二叉树中编号为1至n的结点一一对应。
关系:
满二叉树必为完全二叉树,而完全二叉树不一定是满二叉树。
22,6.3二叉树,第6章树和二叉树,重要性质:
具有n个结点的完全二叉树的深度为log2n+1。
设完全二叉树的深度为k,则根据第二条性质得2k-1-1n2k-1,则2k-1n2k,即k-1log2nk,因为k只能是整数,因此,k=log2n+1。
23,6.3二叉树,第6章树和二叉树,重要性质:
若对含n个结点的完全二叉树从上到下且从左至右进行1至n的编号,则对完全二叉树中任意一个编号为i的结点:
(1)若i=1,则该结点是二叉树的根,无双亲,否则,编号为i/2的结点为其双亲结点;
(2)若2in,则该结点无左孩子,否则,编号为2i的结点为其左孩子结点;
(3)若2i+1n,则该结点无右孩子结点,否则,编号为2i+1的结点为其右孩子结点。
24,6.3二叉树,第6章树和二叉树,存储结构:
顺序存储结构,链式存储结构,25,6.3二叉树,第6章树和二叉树,存储结构:
顺序存储结构,是用一组连续的存储单元来存放二叉树的数据元素。
一维数组btn,数据结构与算法,26,root,6.3二叉树,第6章树和二叉树,存储结构:
链式存储结构:
二叉链表,结点结构:
typedefstructNodeDataTypedata;
structNode*lchild;
structNode*rchild;
BiTNode,*BiTree;
含有n个结点的二叉链表中有2n个指针域,n+1个空域。
27,6.3二叉树,第6章树和二叉树,存储结构:
三叉链表,结点结构:
root,28,6.4二叉树的遍历,第6章树和二叉树,遍历二叉树:
顺着某一条搜索路径访问二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。
“遍历”是任何类型均有的操作,对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。
二叉树是非线性结构,每个结点有两个后继,存在如何遍历即按什么样的搜索路径遍历的问题,29,第6章树和二叉树,“二叉树”由三个基本单元组成:
根结点、左子树和右子树。
若能依次遍历这三部分,就遍历了整个二叉树。
DLR,DRL,LDR,RDL,LRD,RLD,先左后右,先右后左,设用L、D、R分别表示遍历左子树、访问根结点、遍历右子树,对“二叉树”而言,可以有?
种搜索路径:
6,6.4二叉树的遍历,30,第6章树和二叉树,先(根)序遍历的递归定义:
若二叉树为空树,则空操作;
否则,
(1)访问根结点;
(2)先序遍历左子树;
(3)先序遍历右子树。
A,B,D,G,C,E,F,先序遍历结果:
A,B,D,G,C,E,F,voidPreOrder(BiTreeroot)if(root!
=NULL)Visit(root-data);
PreOrder(root-LChild);
PreOrder(root-RChild);
6.4二叉树的遍历,31,第6章树和二叉树,中(根)序遍历的递归定义:
否则,
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树。
A,B,D,G,C,E,F,中序遍历结果:
A,B,D,G,C,E,F,voidInOrder(BiTreeroot)if(root!
=NULL)InOrder(root-LChild);
Visit(root-data);
InOrder(root-RChild);
6.4二叉树的遍历,32,6.3二叉树的遍历与线索化,第6章树和二叉树,后(根)序遍历的递归定义:
否则,
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点。
A,B,D,G,C,E,F,后序遍历结果:
A,B,D,G,C,E,F,voidPostOrder(BiTreeroot)if(root!
=NULL)PostOrder(root-LChild);
PostOrder(root-RChild);
33,第6章树和二叉树,练习,先序:
ABDEHICFJGK,中序:
DBEHIAFJCGK,后序:
DIHEBJFKGCA,6.4二叉树的遍历,34,第6章树和二叉树,举例:
先序:
-,+,a,*,b,-,c,d,/,e,f,中序:
a,+,b,*,c,-,d,-,e,/,f,后序:
a,b,c,d,-,*,+,e,f,/,-,前缀式(波兰式),中缀式(表达式),后缀式(逆波兰式),6.4二叉树的遍历,35,第6章树和二叉树,由遍历序列确定二叉树,由先序和中序序列恢复二叉树举例,先序序列:
ABCDEFG,中序序列:
CBDAEGF,A,A,左子树,右子树,A,B,B,B,C,C,C,D,D,D,E,E,E,F,F,F,G,G,G,6.4二叉树的遍历,36,6.3二叉树的遍历与线索化,第6章树和二叉树,由遍历序列确定二叉树,由中序和后序序列恢复二叉树,中序序列:
DCBGEAHFIJK,后序序列:
DCEGBFHKJIA,A,练习:
I,J,K,H,F,B,G,E,C,D,37,第6章树和二叉树,遍历算法应用:
遍历算法将走遍二叉树中的每一个结点,故输出二叉树中结点并无次序要求,因此可用任一种算法来完成。
voidPreOrder(BiTreeroot)if(root!
=NULL)printf(root-data);
PreOrder(root-RChild)