基本数据结构——树与二叉树(完)
数据结构课程的内容 树和二叉树( Tree Binary Tree ) 一树的基本概念 一、树的定义及其存储结构 1)定义:树是由n(n0)个结点组成的有限集合T,其中 有且仅有一个结点称为根结点(root), 其余结点可以分为m(m≥0)个各互不相交的有限集合T1、T2、…、Tm,其中每一个集合Ti本身又是一棵树. 树T1、T2、T3、T4、…、Tn被称为根的子树subtree) 2)树是一种具有递归性质的结构。 树的表示法有几种: 图形表示法: 左孩子-右兄弟表示法 一、树的定义及其存储结构 ? 常用术语 1)结点:表示树中的元素。如A、B、K等 2)度:结点拥有的子树数。如A的度为3,C的度为1。 树的度:一棵树中结点的最大度数。上图中树的度为3。 3)叶子:度为0的结点,又称终端结点。 4)非终端结点:度不为0的结点。 5)孩子:结点的子树的根。 6)双亲:相应地,该结点称为孩子的双亲 一、树的定义及其存储结构 6)子孙:以某结点为根的子树中的任一结点称为该结点的子孙。 7)祖先:从根到该结点所经分支上的所有结点。 8)兄弟:同一双亲的孩子。 9)结点的层次:从根结点开始算起,根为第一层,根的直接后继结点为第二层,以此类推。 10)深度:树中结点的最大层次数。 一、树的定义及其存储结构 11)森林:是m(m≥0)棵互不相交的树的集合 12)有序树:树中结点在同层中按从左到右有序排列、不能互换的称为有序树;反之称为无序树。 2. 树的逻辑结构 (特点): 一对多(1:n),有多个直接后继(如家谱树、目录树等等),但只有一个根结点,且子树之间互不相交。 可规定为:从上至下、从左至右将树的结点依次存入内存。 重大缺陷:复原困难(不能唯一复原就没有实用价值)。 讨论3:树的链式存储方案应该怎样制定? 一、树的定义及其存储结构 一、树的定义及其存储结构 讨论4--空链域问题:假设有一棵具有n个结点、度为k的树,采用同构型存储结构,那么有多少个空链域? 二、二叉树 1、二叉树的定义 1)二叉树是n(n≥0)个结点的有限集合,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成。这也是一个递归定义。 逻辑结构: 一对二(1:2) 基本特征: ① 每个结点最多只有两棵子树(不存在度大于2的结点); ② 左子树和右子树次序不能颠倒(有序树)。 2)二叉树的五种不同形态 2. 二叉树的性质 (3+2) 二、二叉树 定义1 满二叉树(Full Binary Tree) 一棵深度为k 且有2k-1个结点的二叉树。 二、二叉树 定义2 完全二叉树(Complete Binary Tree) 如果一棵有n个结点的二叉树按与满二叉树相同的编号方式对结点进行编号,若树中n个结点和满二叉树1~n编号完全一致,则称该二叉树为完全二叉树。 二、二叉树 4) 具有n个结点的完全二叉树的深度为[log2 n]+1 证明:设完全二叉树的深度为h,则有 2h-1-1 n ? 2h-1 2h-1 ? n 2h 取对数 h–1 ? log2(n) h 二、二叉树 5) 对于—棵有n个结点的完全二叉树,对编号为i的结点(1≤i≤n),有: 如果 i = 1,则编号为i的结点为二叉树的根,没有双亲。 如果 i 1,则编号为i的结点的双亲为结点[ i/2 ]。 如果 2i n,则编号为i的结点没有左子树。 如果 2i ≤ n,则编号为i的结点的左子树是2i 。 如果2i+1 n,则编号为i的结点没有右子树。 如果2i+1 ≤n,则编号为i的结点的右子树是2i十1。 课堂讨论: 3. 二叉树的存储结构 讨论:不是完全二叉树怎么办? 二、二叉树 讨论:二叉树顺序存储结构的缺点: 例:单右支树的顺序存储 二、二叉树 4、二叉树的链式存储结构 二叉树采用二叉链表进行存储。每个结点由数据域(data)、左指针域(lchild)、右指针域(rchild)组成。 三、二叉树的遍历 三、二叉树的遍历 三、二叉树的遍历 3) 过程描述(以先序遍历为例) 若二叉树为空,则为空操作,否则先访问根结点,然后先序遍历左子树,再先序遍历右子树。这是一个递归定义。 例:用二叉树表示算术表达式 三、二叉树的遍历 2、函数实现(以中序遍历为例) void inorder(node * BT){ if(BT == NULL ) return ; if(BT-lchild != NULL) inorder(BT-lchild); visite(BT); if(BT-rchild != NULL)
原创力文档

文档评论(0)