数据结构-树与二叉树.ppt
《数据结构-树与二叉树.ppt》由会员分享,可在线阅读,更多相关《数据结构-树与二叉树.ppt(89页珍藏版)》请在三一办公上搜索。
1、Chapter 6Tree&Binary Tree,教,学,内,容,1、树和森林的概念2、二叉树的定义、性质及运算;3、二叉树的存储结构 4、遍历二叉树、树、森林5、森林与二叉树的转换6、哈夫曼树、哈夫曼编码,树型结构(非线性结构),结点之间有分支,具有层次关系,例,自然界:树,人类社会,家谱,院系组织机构,树的概念,树的定义 树是 n(n 0)个结点的有限集。若n=0,称为空树;若 n 0,则它满足如下两个条件:,有且仅有一个称之为根(Root)的结点。当n 1,除根以外的其它结点分为 m(m 0)个互不相交的有限集 T1,T2,Tm,其中每个集合又是一棵符合本定义的树,并且称为根的子树。,
2、例如,A,只有根结点的树,有13个结点的树,A是根;其余数据元素分成三个互不相交的子集,T1=B,E,F,K,L;T2=C,G;T3=D,H,I,J,M,T1,T2,T3都是根A的子树,且本身也是一棵树。,根结点,T1,R=,树结构和线性结构作如下对照:,树的基本术语,结点结点的度叶子结点分支结点,儿子结点父亲结点兄弟结点祖先结点,树的度结点的层次树的深度森林,有序树,子树之间存在确定的次序关系,无序树,子树之间不存在确定的次序关系,家族树就属于有序树。,森林,是m(m0)棵互不相交的树的集合,root,给森林中的各子树加上一个父亲结点,森林就变成了树。,T3,T2,T1,二叉树或为空树,或是
3、由一个根结点加上两棵分别称为左子树和右子树的、互不交叉的二叉树组成。,二叉树,为何要重点研究每结点最多只有两个“叉”的树?二叉树的结构最简单,规律性最强;可以证明,所有树都能转为唯一对应的二叉树,不失一般性。,根结点,右子树,左子树,(a)空二叉树,(b)根和空的 左右子树,(c)根和左子树,(d)根和右子树,(e)根和左右子树,注:虽然二叉树与树概念不同,但有关树的基本术语对二叉树都适用。,二叉树的五种基本形态,性质1 在二叉树的第 i 层上至多有 2i 1个结点。(i 1),证明:当i=1时,只有根结点,2i-1=20=1。假设对所有j,ij1,命题成立,即第j层上至多有2 j-1 个结点
4、。由归纳假设第i-1 层上至多有 2i2个结点。二叉树的每个结点的度至多为2,故在第i层上的最大结点数为第i-1层上的最大结点数的2倍,即2*2i2=2i-1。,二叉树的重要特性,性质2 深度为 k 的二叉树至多有 2 k-1个结点,其中k 1。证明:由性质1可见,深度为k的二叉树的最大结点数为,20+21+2k-1=2k-1,性质3 对任何一棵二叉树T,如果其叶子结点数为 n0,度为2的结点数为 n2,则n0n21。,证明:n=n0+n1+n2 e=n 1=2n2+n1 因此,2n2+n1=n0+n1+n2-1 n0=n2+1,满二叉树(Full Binary Tree)定义1:一棵深度为k
5、且有2 k-1个结点的二叉树称为满二叉树。,两种特殊形态的二叉树,特点:每一层上的结点数都达到最大,叶子全部在最底层,非完全二叉树,完全二叉树(Complete Binary Tree)若设二叉树的深度为h,除第 h 层外,其它各层(0 h-1)的结点数都达到最大值,第 h 层从右向左连续缺若干结点。,完全二叉树,性质4 具有 n(n 0)个结点的完全二叉树的深度为log2(n)1。,证明:设完全二叉树的深度为 h,则根据性质2和完全二叉树的定义有2h-1-1 n 2h-1,取对数 h1 log2n h,又h是整数因此有 h=log2(n)1,性 质 5,若对含n个结点的完全二叉树从上到下且从
6、左至右进行1至n的编号,则对完全二叉树中任意一个编号为i的结点:,哪个是完全二叉树,(1)若i=1,则该结点是二叉树的根,否 则,编号为i/2 的结点为其父亲结点。(2)若2in,则该结点无左孩子,否则,编号为2i的结点为其左孩子结点。(3)若2i+1n,则该结点无右孩子结点,否则,编号为2i+1的结点为其右孩子 结点。,3.深度为9的二叉树中至少有 个结点。)9)8)91,2.深度为的二叉树的结点总数,最多为 个。)k-1)log2k)k)k,1.树中各结点的度的最大值称为树。)高度)层次)深度)度,D,C,C,课堂练习:,二、二叉树的链式存储表示,一、二叉树的顺序存储表示,6.3 二叉树的
7、存储结构,顺序存储表示,用一组地址连续的存储单元存储二叉树中的数据元素。将完全二叉树上编号为i的结点元素存储在一维数组中下标为i-1的分量中,1,2,3,4,5,6,7,10,8,9,1,练习,2,4,1,6,3,5,对于一般的非完全二叉树不能直接使用二叉树的顺序存储结构。,可以首先在非完全二叉树中增添一些并不存在的空结点使之变成完全二叉树的形态,然后再用顺序存储结构存储。,(a)一般二叉树,(b)完全二叉树形态,单支树,由于一般二叉树必须仿照完全二叉树那样存储,可能会浪费很多存储空间,单支树就是一个极端情况。,链表存储表示,A,D,E,B,C,F,root,lchild data rchil
8、d,结点结构,二叉链表,A,D,E,B,C,F,root,三叉链表,parent lchild data rchild,结点结构,(Binary Tree Traversal),6.3 二叉树的遍历,遍历概念,顺着某一条搜索路径巡访二叉树中的结点,使 得每个结点均被访问一次,而且仅被访问一次。,“访问”的含义很广,可以是对结点作各种处理,如:输出结点的信息、修改结点的数据值等,但要求这种访问不破坏原来的数据结构。,遍历方法,依次遍历二叉树中的三个组成 部分,便是遍历了整个二叉树,假设:L:遍历左子树 v:访问根结点 R:遍历右子树,则遍历整个二叉树方案共有:,遍历目的,得到树中所有结点的一个线
9、性排列。,vLR、LvR、LRv、vRL、RvL、RLv 六种。,若规定先左后右,则只有前三种情况:vLR 前(根)序遍历,LvR 中(根)序遍历,LRv 后(根)序遍历。,前序遍历二叉树的操作定义:若二叉树为空,则空操作;否则(1)访问根结点;(2)前序遍历左子树;(3)前序遍历右子树。,前序遍历:ABC,A B E L D H M I J,中序遍历二叉树的操作定义:若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。,中序遍历:BAC,E L B A M H I D J,后序遍历二叉树的操作定义:若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)
10、后序遍历右子树;(3)访问根结点。,后序遍历:BCA,L E B M I H J D A,a+b,(a+b)c d/e,a+bc,分析表达式和二叉树的关系,a,b,+,a,b,c,+,a,b,c,+,(a+b)c,a,b,c,d,e,-,+,/,-,-,/,+,a,b,c,d,e,f,例:写出下图二叉树的先序、中序和后序遍历顺序。,遍历结果:,前序:-+ab-c d/e f,中序:a+bc-d-e/f,后序:a b c d-+e f/-,表达式的前缀表示,表达式的中缀表示,表达式的后缀表示,二叉树的类定义,template class BinTreeNode/二叉树结点类 private:Bi
11、nTreeNode*LChild,*RChild;Type data;public:BinTreeNode()LChild=RChild=NULL;BinTreeNode(const Type,template class BinaryTree/二叉树类 protected:BinTreeNode*root;void PreOrderHelp(BinTreeNode*r,void(*Visit)(const Type,先、中、后序遍历(辅助函数),public:BinaryTree();/建立以r为根的二叉树 BinaryTree(BinTreeNode*r);virtual BinaryTr
12、ee();/析构函数 BinTreeNode*GetRoot()const;bool Empty()const;void InOrder(void(*Visit)(const Type/二叉树的前序遍历,void PostOrder(void(*Visit)(const Type,二叉树前序遍历递归算法,template void BinaryTree:PreOrderHelp(BinTreeNode*r,void(*Visit)(const Type,template void BinaryTree:PreOrder(void(*Visit)(Type,template void write
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 二叉
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6578843.html