解决二叉树的编程问题.pptVIP

  • 1
  • 0
  • 约5.04千字
  • 约 25页
  • 2025-10-09 发布于广东
  • 举报

解决二叉树的编程问题数据结构(C#语言版)解决二叉树的编程问题第1页,共25页,星期日,2025年,2月5日目标在本章中,你将达到以下目标:理解二叉树的两种存储结构解决二叉树的编程问题构造哈夫曼编码第2页,共25页,星期日,2025年,2月5日学习情境——用二叉树解决快速搜索磁盘文件中的编程 [问题描述]磁盘上有一个文件,物理上随机存储了很多记录,如下表(a),每条记录有一个关键字(职工号)段唯一的标识该记录。为了方便对表(a)的记录进行增、删、改、查,一般需要建立索引表(b)。现需要实现如下的功能:选择一种数据结构在内存中存放索引表,通过该数据结构能高效地插入、删除和搜索索引表;输入任一关键字,显示出查询该关键字的路径。第3页,共25页,星期日,2025年,2月5日认识二叉树——分析二叉树的逻辑结构1、二叉树的定义二叉树(BinaryTree)是n(n≥0)个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。Ф左子树右子树左子树右子树2、二叉树的5种形态第4页,共25页,星期日,2025年,2月5日认识二叉树——分析二叉树的逻辑结构3、二叉树的相关术语(1)结点的度。结点所拥有的子树的个数称为该结点的度。(2)叶结点。度为0的结点称为叶结点,或者称为终端结点。(3)分枝结点。度不为0的结点称为分支结点,或者称为非终端结点。一棵树的结点除叶结点外,其余的都是分支结点。(4)左孩子、右孩子、双亲。树中一个结点的子树的根结点称为这个结点的孩子。这个结点称为它孩子结点的双亲。具有同一个双亲的孩子结点互称为兄弟。(5)路径、路径长度。如果一棵树的一串结点n1,n2,…,nk有如下关系:结点ni是ni+1的父结点(1≤ik),就把n1,n2,…,nk称为一条由n1至nk的路径。这条路径的长度是k-1。(6)祖先、子孙。在树中,如果有一条路径从结点M到结点N,那么M就称为N的祖先,而N称为M的子孙。第5页,共25页,星期日,2025年,2月5日认识二叉树——分析二叉树的逻辑结构3、二叉树的相关术语(7)结点的层数。规定树的根结点的层数为1,其余结点的层数等于它的双亲结点的层数加1。(8)树的深度。树中所有结点的最大层数称为树的深度。(9)树的度。树中各结点度的最大值称为该树的度。(10)满二叉树。在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的一棵二叉树称作满二叉树。第6页,共25页,星期日,2025年,2月5日认识二叉树——分析二叉树的逻辑结构3、二叉树的相关术语(11)完全二叉树。一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。完全二叉树的特点是:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。第7页,共25页,星期日,2025年,2月5日认识二叉树——识别二叉树的基本操作Initiate(bt):建立一棵空二叉树。Create(x,lbt,rbt):生成一棵以x为根结点的数据域信息,以二叉树lbt和rbt为左子树和右子树的二叉树。InsertL(bt,x,parent):将数据域信息为x的结点插入到二叉树bt中作为结点parent的左孩子结点。如果结点parent原来有左孩子结点,则将结点parent原来的左孩子结点作为结点x的左孩子结点。InsertR(bt,x,parent):将数据域信息为x的结点插入到二叉树bt中作为结点parent的右孩子结点。如果结点parent原来有右孩子结点,则将结点parent原来的右孩子结点作为结点x的右孩子结点。DeleteL(bt,parent):在二叉树bt中删除结点parent的左子树。DeleteR(bt,parent):在二叉树bt中删除结点parent的右子树。Search(bt,x):在二叉树bt中查找数据元素x。Traverse(bt):按某种方式遍历二叉树bt的全部结点。第8页,共25页,星期日,2025年,2月5日认识二叉树——识别二叉树的主要性质性质1一棵非空二叉树的第i层上最多有2i-1个结点(i≥1)。性质2一棵深度为k的二叉树中,最多具有2k-1个结点。性质3对于一棵非空的二叉树,如果叶子结点数为n0,度数为2的结点数为n2

文档评论(0)

1亿VIP精品文档

相关文档