第六章 树和二叉树解析.ppt

数据结构 主讲教师: 杨艳霞 时间:2010-2011学年下 第六章 树和二叉树 概述 树型结构是一类重要的非线性结构 树是以分支关系定义的层次结构 树的应用 人类社会的族谱 社会组织结构 在编译程序中的语法树 在数据库系统中,可用树来组织信息 树型结构实例 内 容 6.1 树的定义和基本术语 1. 树的一般定义 树(Tree)是n(n=0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件: 有且仅有一个结点没有前驱,称该结点为根结点(Root); 除根结点以外,其余结点可分为m(m≥0)个互不相交的有限集合T0,Tl,…,Tm-1。 其中每个集合又构成一棵树,树T0,Tl ,…,Tm-1被称为根结点的子树(Subtree)。 每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个后继。 例子 说明 树的结构定义是一个递归定义,即在树的定义中有用到了树的概念,递归是树的固有特性。 其它表示形式(含有递归特性): 嵌套集合形式 广义表形式 凹入表示法 6.2 二叉树的相关概念 1. 二叉树的定义 二叉树是由 n(n=0)个结点的有限集合构成; 此集合或者为空集(空树); 或者由一个根结点及两棵互不相交的左子树和右子树组成(左、右子树可以为空),并且左右子树都是二叉树。 实例 说明 二叉树和树的区别 二叉树是有序树,其子树要区分左子树和右子树,即使只有一棵子树也要进行区分,说明它是左子树,还是右子树。而树一般是指无序树。 二叉树的五种基本形态 二叉树的五种基本形态 2. 二叉树的性质 性质1:在二叉树的第i层上至多有2i-1个结点(i=1) 性质3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。 满二叉树和完全二叉树 满二叉树是深度为k,且有 2k-1 个结点的二叉树。即,满二叉树的每一层上的结点数都是最大结点数。 对满二叉树编号:从根结点开始,从上到下,从左至右。 完全二叉树:深度为k且有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树。 特点 叶子结点只可能在层次最大的两层上出现; 对任一结点,若其右分支下的子孙的最大层次为l ,则其左分支下的子孙的最大层次必为l 和 l +1。 在满二叉树的最下一层上,从最右边开始连续删除去若干个结点得到的二叉树任然是一棵完全树。 实例 3. 二叉树的存储结构 顺序存储结构 链式存储结构 二叉链表 三叉链表 线索链表 二叉树的顺序存储结构 说明 顺序存储结构是用一组连续的存储单元存储二叉树的数据元素,即要把二叉树这种非线性结构的结点安排成为一个线性的序列,且二叉树结点在这个线性序列中的相互位置能反映出二叉树结点之间的逻辑关系。 约定:按照完全二叉树上的编号 i的结点元素存储在如上定义的一维数组中下标为 i-1 的分量中。而对于一般的二叉树,则应将其每个结点与完全二叉树上的结点相对照,存储在一维数组的相应分量中;对于不存的结点,以“0”表示。 例子 顺序存储结构的缺点 很可能对存储空间造成极大的浪费。 在最坏的情况下,一个深度为k且只有k个结点的右单支树,需要2k-1个结点存储空间。 若经常需要插入与删除树中结点时,顺序存储方式不是很好! 二叉链表和三叉链表 二叉链表 说明: 一个二叉链表由根指针root唯一确定。若二叉树为空,则root=NULL;若结点的某个孩子不存在,则相应的指针为空。 具有n个结点的二叉链表中,共有2n个指针域。其中只有n-1个用来指示结点的左、右孩子,其余的n+1个指针域为空。 三叉链表 //============二叉链表的存储表========================= typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild ; //左右孩子指针 } BiTNode, * BiTree; 6.3 遍历二叉树和线索二叉树 1. 遍历二叉树的含义 遍历二叉树,就是按某条搜索路径访问树中的每一个结点,使得每一个结点均被访问一次,而且仅被访问一次。 遍历运算对线性结构是容易解决的,而对于二叉树这样的非线性结构,则需要寻找某种规律,以使二叉树上的结点能排列在一个线性队列上,从而便于遍历。因此,二叉树遍历的问题的本质,就是如何将二叉树的非线性结构按照一定的规则排列成为线性结构。 假如以L、D、R分别表示遍历左子树、遍历根结点和遍历右子树,遍历整个二叉树则有DLR、LDR、LRD、DRL、RDL、RLD六种遍历方案。 若规定先左后右,则只有前三种情况: (1)DLR——先(根

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档