1、,若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 章
2、 树和二叉树,凹入表示,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 章 树
3、和二叉树,基本术语,结点:,数据元素+若干指向子树的分支,结点的度:,分支的个数,树的度:,树中所有结点的度的最大值,叶子结点:,度为零的结点,分支结点:,度大于零的结点,(从根到结点的)路径:,由从根到该结点所经分支和结点构成。,6.2 树的概念,13,数 据 结 构,第 6 章 树和二叉树,基本术语,孩子结点:,一个结点的直接后继,双亲结点:,一个结点的直接前驱,兄弟结点:,同一双亲结点的孩子结点之间互称。,堂兄弟、祖先结点、子孙结点,结点的层次:,假设根结点的层次为1,依次累加。,树的深度:,树中叶子结点所在的最大层次,森林:,是m(m0)棵互不相交的树的集合,6.2 树的概念,14,第
4、 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;,每个结点的孩子结点次序不能任意颠倒。,二叉树或为空树,或是由一个根结点加上两棵分别称为左子
5、树和右子树的、互不相交的二叉树组成。,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 层时,只有一个根
6、结点: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+2n
7、2,而 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-1 n 2k-1,则 2k-1 n 2k,即 k-1 log2n k,因为 k 只能是整数,因此,k=log
8、2n+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 章 树和二叉树,存储结构:,顺序
9、存储结构,是用一组连续的存储单元来存放二叉树的数据元素。,一维数组btn,数 据 结 构 与 算 法,26,root,6.3 二叉树,第 6 章 树和二叉树,存储结构:,链式存储结构:,二叉链表,结点结构:,typedef struct Node DataType data;struct Node*lchild;struct Node*rchild;BiTNode,*BiTree;,含有n个结点的二叉链表中有2n个指针域,n+1个空域。,27,6.3 二叉树,第 6 章 树和二叉树,存储结构:,三叉链表,结点结构:,root,28,6.4 二叉树的遍历,第 6 章 树和二叉树,遍历二叉树:,顺
10、着某一条搜索路径访问二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。,“遍历”是任何类型均有的操作,对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。,二叉树是非线性结构,每个结点有两个后继,存在如何遍历即按什么样的搜索路径遍历的问题,29,第 6 章 树和二叉树,“二叉树”由三个基本单元组成:根结点、左子树和右子树。若能依次遍历这三部分,就遍历了整个二叉树。,DLR,DRL,LDR,RDL,LRD,RLD,先左后右,先右后左,设用L、D、R分别表示遍历左子树、访问根结点、遍历右子树,对“二叉树”而言,可以有?种搜索路径:,6,6.4 二叉树的遍历,
11、30,第 6 章 树和二叉树,先(根)序遍历的递归定义:,若二叉树为空树,则空操作;否则,(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。,A,B,D,G,C,E,F,先序遍历结果:,A,B,D,G,C,E,F,void PreOrder(BiTree root)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
12、,F,中序遍历结果:,A,B,D,G,C,E,F,void InOrder(BiTree root)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,void PostOrder(BiTree root)if(root!=NULL)PostOrder(
13、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 章 树和二叉树,由遍历序列确定二叉树,由先序和中序序列恢复二叉树举例,先序序列:A B C
14、D E F G,中序序列:C B D A E G F,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 章 树和二叉树,由遍历序列确定二叉树,由中序和后序序列恢复二叉树,中序序列:D C B G E A H F I J K,后序序列:D C E G B F H K J I A,A,练习:,I,J,K,H,F,B,G,E,C,D,37,第 6 章 树和二叉树,遍历算法应用:,遍历算法将走遍二叉树中的每一个结点,故输出二叉树中结点并无次序要求,因此可用任一种算法来完成。,void PreOrder(BiTree root)if(root!=NULL)printf(root-data);PreOrder(root-RChild)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1