数据结构与算法第四章清华大学出版社赵玉兰.ppt
《数据结构与算法第四章清华大学出版社赵玉兰.ppt》由会员分享,可在线阅读,更多相关《数据结构与算法第四章清华大学出版社赵玉兰.ppt(130页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章 树与二叉树树与二叉树4.1 树的定义和基本术语树的定义和基本术语4.2 二叉树二叉树4.3 树与森林树与森林4.4 森林与二叉树的关系森林与二叉树的关系4.5 Huffman 树与编码树与编码24.1 树(树(Tree)的定义和基本术语)的定义和基本术语树形结构是一种非线性结构,应用十分广泛树形结构是一种非线性结构,应用十分广泛u例如,行政机构、家谱、磁盘目录等例如,行政机构、家谱、磁盘目录等内蒙古大学内蒙古大学理工学院理工学院计算机学院计算机学院生命科学学院生命科学学院外国语学院外国语学院人文学院人文学院数数学学系系物物理理系系电电子子系系计计算算机机系系计计算算中中心心网网络络
2、中中心心汉汉语语系系历历史史系系哲哲学学系系生生物物系系环环境境系系动动物物中中心心生生物物工工程程中中心心资资源源所所英英语语系系日日语语系系 行政机构行政机构34.1 树(树(Tree)的定义和基本术语)的定义和基本术语u磁盘目录磁盘目录44.1 树(树(Tree)的定义和基本术语)的定义和基本术语树的定义树的定义 树是由树是由 n(n 0)个结点组成的有限集合)个结点组成的有限集合u如果如果n0,称为空树,称为空树u如果如果n 0,则:,则:有一个特定的称之为根(有一个特定的称之为根(root)的结点,它只有直接后)的结点,它只有直接后继,但没有直接前驱;继,但没有直接前驱;除根以外的其
3、它结点划分为除根以外的其它结点划分为m(m 0)个互不相交的有)个互不相交的有限集合限集合 T0,T1,Tm-1,每个集合又是一棵树,并且称,每个集合又是一棵树,并且称之为根的子树(之为根的子树(subTree)。每棵子树的根结点有且仅)。每棵子树的根结点有且仅有一个直接前驱,但可以有有一个直接前驱,但可以有0个或多个直接后继。个或多个直接后继。树的定义具有递归性树的定义具有递归性54.1 树(树(Tree)的定义和基本术语)的定义和基本术语例,例,Tree=(D,R)uD=Book,C1,C2,C3,S1.1,S1.2,S2.1,S2.2,S2.3,S2.1.1,S2.1.2 uR=,Boo
4、k C1 C2 C3 S1.1 S1.2 S2.1 S2.2 S2.3 S2.1.1 S2.1.2 ChapterSectionSection64.1 树(树(Tree)的定义和基本术语)的定义和基本术语树的术语树的术语结点结点(node)结点的度结点的度(degree)分支分支(branch)结点结点叶叶(leaf)结点结点子女子女(child)结点结点双亲双亲(parent)结点结点兄弟兄弟(sibling)结点结点祖先祖先(ancestor)结点结点子孙子孙(descendant)结点结点结点所处层次结点所处层次(level)树的高度树的高度(depth)树的度树的度(degree)有序
5、树有序树 无序树无序树 森林森林74.1 树(树(Tree)的定义和基本术语)的定义和基本术语术语主要来源于家谱和树术语主要来源于家谱和树u双亲、子女(双亲、子女(parent,child)若若 R,则称,则称a是是b的双亲,的双亲,b是是a的子女(孩子)的子女(孩子)u结点的度(结点的度(degree)结点所拥有的子女数结点所拥有的子女数u叶(叶(leaf)结点)结点度为度为0的结点的结点u分枝结点(分枝结点(branch node)度大于度大于0的结点的结点u树的度(树的度(degree)树中最大的结点度树中最大的结点度84.1 树(树(Tree)的定义和基本术语)的定义和基本术语u结点所
6、在的层次(结点所在的层次(level)树根的层次为树根的层次为1其它任一结点所在的层次是其双亲的层次加其它任一结点所在的层次是其双亲的层次加1u深度或高度(深度或高度(depth)结点所在的层次的最大层数结点所在的层次的最大层数12345u兄弟(兄弟(sibling)具有同一双亲的结点互称具有同一双亲的结点互称兄弟兄弟u堂兄弟(堂兄弟(cousin)在同层的非兄弟结点互称在同层的非兄弟结点互称堂兄弟堂兄弟94.1 树(树(Tree)的定义和基本术语)的定义和基本术语u祖先、子孙(祖先、子孙(descendant,ancestor)一个结点是它所有子树中的结点的祖先,这些结点是它一个结点是它所有
7、子树中的结点的祖先,这些结点是它的子孙的子孙u路径(路径(path)是一结点序列是一结点序列 n1,n2,n3,nk,并且前,并且前1个结点是后个结点是后1个个结点的双亲结点的双亲它的长度是它的长度是 k-1u有序树(有序树(ordered tree)每个结点的子女由左到右是有次序的;否则是无序树每个结点的子女由左到右是有次序的;否则是无序树ABCACB无序无序有序有序104.1 树(树(Tree)的定义和基本术语)的定义和基本术语ABCDEFGHIJKLM结点结点A的度:的度:3结点结点B的度:的度:2结点结点M的度:的度:0叶子:叶子:K,L,F,G,M,I,J结点结点A的孩子:的孩子:B
8、,C,D结点结点B的孩子:的孩子:E,F结点结点I的双亲:的双亲:D结点结点L的双亲:的双亲:E结点结点B,C,D为兄弟为兄弟结点结点K,L为兄弟为兄弟树的度:树的度:3结点结点A的层次:的层次:1结点结点M的层次:的层次:4树的高度:树的高度:4结点结点A是结点是结点F、G的祖先的祖先114.1 树(树(Tree)的定义和基本术语)的定义和基本术语u森林(森林(Forest)是是 m(m 0)棵互不相交的树的集合)棵互不相交的树的集合ArootBCDEFGHIJMKLF124.2 二叉树二叉树ADT二叉树二叉树二叉树(二叉树(Binary Tree)u是有限个结点的集合(可以为空是有限个结点
9、的集合(可以为空)u当二叉树非空时,其中有且仅有一个称为根的结当二叉树非空时,其中有且仅有一个称为根的结点,余下的结点(如果有的话)被分为两棵互不点,余下的结点(如果有的话)被分为两棵互不相交的二叉树,分别称为根的左子树和右子树相交的二叉树,分别称为根的左子树和右子树134.2 二叉树二叉树ADT二叉树二叉树例例ABCDEFGHK根结点根结点左子树左子树右子树右子树注意:二叉树不是树,它是另外单独定义的一种树形注意:二叉树不是树,它是另外单独定义的一种树形注意:二叉树不是树,它是另外单独定义的一种树形注意:二叉树不是树,它是另外单独定义的一种树形结构,并非一般树的特例。它的子树有顺序规定,分结
10、构,并非一般树的特例。它的子树有顺序规定,分结构,并非一般树的特例。它的子树有顺序规定,分结构,并非一般树的特例。它的子树有顺序规定,分为左子树和右子树,不能随意颠倒。为左子树和右子树,不能随意颠倒。为左子树和右子树,不能随意颠倒。为左子树和右子树,不能随意颠倒。144.2 二叉树二叉树ADT二叉树二叉树二叉树的二叉树的5种基本形态种基本形态 空空 只有根只有根 右子树空右子树空 左子树空左子树空 左、右子树非空左、右子树非空问题:具有问题:具有3 3个结点的二叉树可能有几种不同形态?个结点的二叉树可能有几种不同形态?154.2 二叉树二叉树ADT二叉树二叉树ADT二叉树的定义二叉树的定义AD
11、T BinaryTree is Data 是有限个结点的集合是有限个结点的集合D。当。当D非空时,其中有一根结点非空时,其中有一根结点t,余下的结点被分为余下的结点被分为t的左子树和右子树。的左子树和右子树。Operations Constructor Process:建立一棵空二叉树:建立一棵空二叉树 Delete Process:删除二叉树:删除二叉树 IsEmpty Process:判断二叉树是否是空:判断二叉树是否是空 Output:若二叉树为空,则返回:若二叉树为空,则返回true,否则返回,否则返回false164.2 二叉树二叉树ADT二叉树二叉树 Size Process:计算
12、二叉树的结点数:计算二叉树的结点数size Output:size Height Process:计算二叉树的高度:计算二叉树的高度height Output:height Root Process:x Output:置二叉树的根结点的值为:置二叉树的根结点的值为x Parent Input:node是二叉树中的一个结点是二叉树中的一个结点 Process:求:求node的双亲的双亲p,若,若node 是根,则是根,则p为空为空 Output:p 174.2 二叉树二叉树ADT二叉树二叉树 CreateBinaryTree Input:二叉树的某种形式的定义:二叉树的某种形式的定义defini
13、tion Process:根据此定义:根据此定义definition构造二叉树构造二叉树 MakeTree Input:data是根结点值,是根结点值,left是左子树,是左子树,right是右子树是右子树 Process:创建二叉树,:创建二叉树,data是根结点值,是根结点值,left是其左子是其左子 树,树,right是其右子树是其右子树 BreakTree Process:拆分二叉树,:拆分二叉树,data是根结点数据,是根结点数据,left是左子树,是左子树,right是右子树是右子树 Output:data,left,right PreOrder Input:Visit()是结点访
14、问函数是结点访问函数 Process:按前序遍历对二叉树中每个结点调用:按前序遍历对二叉树中每个结点调用Visit()1次且仅次且仅1次次 Output:根据:根据Visit(),按前序遍历序列得到结果,按前序遍历序列得到结果184.2 二叉树二叉树ADT二叉树二叉树 InOrder Input:Visit()是结点访问函数是结点访问函数 Process:按中序遍历对二叉树中每个结点调用:按中序遍历对二叉树中每个结点调用Visit()1次且仅次且仅1次次 Output:根据:根据Visit(),按中序遍历序列得到结果,按中序遍历序列得到结果 PostOrder Input:Visit()是结点
15、访问函数是结点访问函数 Process:按后序遍历对二叉树中每个结点调用:按后序遍历对二叉树中每个结点调用Visit()1次且仅次且仅1次次 Output:根据根据Visit(),按后序遍历序列得到结果,按后序遍历序列得到结果 LevelOrder Input:Visit()是结点访问函数是结点访问函数 Process:按层次对二叉树中每个结点调用:按层次对二叉树中每个结点调用Visit()1次且仅次且仅1次次 Output:根据:根据Visit(),按层次遍历序列得到结果,按层次遍历序列得到结果 ADT BinaryTree 194.2 二叉树二叉树二叉树的性质二叉树的性质性质性质1u在二叉
16、树的第在二叉树的第 i 层最多有层最多有 2i-1 个结点(个结点(i 1 1)。)。用归纳法证明:用归纳法证明:归纳基:归纳基:归纳假设:归纳假设:归纳证明:归纳证明:i=1 层时,只有一个根结点,层时,只有一个根结点,2i-1=20=1i=k-1(1k i)时命题成立时命题成立i=k 时,二叉树上每个结点至多有两棵时,二叉树上每个结点至多有两棵子树,则第子树,则第 i 层的结点数层的结点数=2k-2 2=2k-2+1=2k-1=2i-1 204.2 二叉树二叉树二叉树的性质二叉树的性质性质性质2 u高度为高度为 k 的二叉树最多有的二叉树最多有 2k1个结点。(个结点。(k 1)证明:证明
17、:基于上一条性质,深度为基于上一条性质,深度为 k 的二叉树上的结点的二叉树上的结点数至多为数至多为 20+21+2k-1=2k-1 214.2 二叉树二叉树二叉树的性质二叉树的性质性质性质3 u任一二叉树,若其叶结点个数为任一二叉树,若其叶结点个数为 n0,度为,度为2的非叶的非叶结点个数为结点个数为 n2,则,则 n0n21证明:证明:若设度为若设度为1的结点有的结点有 n1 个,总结点个数为个,总结点个数为n,则则 n=n0+n1+n2 再设总边数为再设总边数为e,则根据二叉树的定义,则根据二叉树的定义,e=2n2+n1=n-1 因此,有因此,有 2n2+n1=n0+n1+n2-1 n2
18、=n0-1 n0=n2+1 224.2 二叉树二叉树二叉树的性质二叉树的性质性质性质4 u具有具有 n 个结点的二叉树的高度最小为个结点的二叉树的高度最小为 log2(n+1)证明:由性质证明:由性质2,高度为,高度为 h 的二叉树最多有的二叉树最多有 2h-1个结个结 点,即点,即 n 2h-1 因此因此 hlog2(n+1)因为因为 h 只能是整数,所以,只能是整数,所以,h log2(n+1)注:注:x x :表示不小于:表示不小于x的最小整数的最小整数 x x :表示不大于:表示不大于x的最大整数的最大整数234.2 二叉树二叉树二叉树的性质二叉树的性质满二叉树(满二叉树(Full B
19、inary Tree)u每一层的结点数都达到了最大的二叉树每一层的结点数都达到了最大的二叉树完全二叉树(完全二叉树(Complete Binary Tree)u若设二叉树的高度为若设二叉树的高度为h,除第,除第h层外,其它各层层外,其它各层(0h-1)的结点数都达到最大个数,第)的结点数都达到最大个数,第 h 层从右层从右向左连续缺若干结点,这就是完全二叉树向左连续缺若干结点,这就是完全二叉树A15234678 9 10BCDEFGH I JA15234678910BCDEFGHIJKLM N O1112 13 14 15244.2 二叉树二叉树二叉树的性质二叉树的性质性质性质5 u在编号的完
20、全二叉树中,有以下关系:在编号的完全二叉树中,有以下关系:若若i=1,则,则 i 无双亲无双亲 若若i1,则,则 i 的双亲的编号为的双亲的编号为 i/2 若若2*in,则,则 i 的左子女的编号为的左子女的编号为 2*i 若若2*i+1n,则,则 i 的右子女的编号为的右子女的编号为 2*i+1若若 i 为偶数,且为偶数,且in,则其右兄弟的编号为,则其右兄弟的编号为 i+1 若若 i 为奇数,且为奇数,且i1,则其左兄弟的编号为,则其左兄弟的编号为 i-1254.2 二叉树二叉树二叉树的实现二叉树的实现顺序存储表示顺序存储表示u完全二叉树的顺序存储表示完全二叉树的顺序存储表示根据性质根据性
21、质5:STi 的的双亲双亲是是ST i i/2/2 ,左子女左子女是是ST2*i,右子女右子女是是ST2*i+1。123456789 1011121 23 456789 10 11 12264.2 二叉树二叉树二叉树的实现二叉树的实现u一般二叉树的顺序存储表示一般二叉树的顺序存储表示注:注:注:注:由于一般二叉树必由于一般二叉树必由于一般二叉树必由于一般二叉树必须仿照完全二叉树那样须仿照完全二叉树那样须仿照完全二叉树那样须仿照完全二叉树那样存储,可能会浪费很多存储,可能会浪费很多存储,可能会浪费很多存储,可能会浪费很多存储空间,单支树就是存储空间,单支树就是存储空间,单支树就是存储空间,单支树
22、就是一个极端情况。一个极端情况。一个极端情况。一个极端情况。1346789131521 2 3 4 5 6 7 8 9 10 11 12 13 14 15274.2 二叉树二叉树二叉树的实现二叉树的实现链表存储表示链表存储表示284.2 二叉树二叉树二叉树的实现二叉树的实现u例例294.2 二叉树二叉树二叉树的实现二叉树的实现u二叉链表结点类的定义二叉链表结点类的定义class BinaryTreeNode DataType data;BinaryTreeNode*leftChild,*rightChild;/左、右指针左、右指针 public:BinaryTreeNode(DataType&
23、e,BinaryTreeNode *l=NULL,BinaryTreeNode*r=NULL)data=e;leftChild=l;rightChild=r;/BinaryTreeNode 304.2 二叉树二叉树二叉树的实现二叉树的实现u二叉链表类的定义二叉链表类的定义class BinaryTree BinaryTreeNode*root;/根结点指针根结点指针 public:BinaryTree()root=NULL;/创建一个空的二叉树;创建一个空的二叉树;bool IsEmpty();/如果二叉树为空,则返回如果二叉树为空,则返回true,否则返,否则返 回回false bool R
24、oot(DataType&x);/置置x为根结点值;若操作失败,为根结点值;若操作失败,则返回则返回false,否则返回,否则返回true void CreateBinaryTree(BinaryTreeNode*&t=root);/通过扩充二叉树的前序遍历序列,创建二叉树通过扩充二叉树的前序遍历序列,创建二叉树 void MakeTree(DataType&data,BinaryTree&left,BinaryTree&right);/创建二叉树,创建二叉树,data为根结点为根结点 值,值,left作为左子树,作为左子树,right作为右子树作为右子树314.2 二叉树二叉树二叉树的实现二
25、叉树的实现void BreakTree(DataType&data,BinaryTree&left,BinaryTree&right);/拆分二叉树拆分二叉树void PreOrder(void Visit(BinaryTreeNode*&),BinaryTreeNode*&=root);void InOrder(void Visit(BinaryTreeNode*&),BinaryTreeNode*&=root);void PostOrder(void Visit(BinaryTreeNode*&),BinaryTreeNode*&=root);void LevelOrder(void Vi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 第四 清华大学出版社 玉兰
限制150内