当前位置: 首页 > news >正文

网站域名邮箱怎么注册服装设计师参考的网站

网站域名邮箱怎么注册,服装设计师参考的网站,企业网页开发,网站开发时间计划深入学习二叉树(一) 二叉树基础 前言 树是数据结构中的重中之重#xff0c;尤其以各类二叉树为学习的难点。一直以来#xff0c;对于树的掌握都是模棱两可的状态#xff0c;现在希望通过写一个关于二叉树的专题系列。在学习与总结的同时更加深入的了解掌握二叉树。本系列文…深入学习二叉树(一) 二叉树基础 前言 树是数据结构中的重中之重尤其以各类二叉树为学习的难点。一直以来对于树的掌握都是模棱两可的状态现在希望通过写一个关于二叉树的专题系列。在学习与总结的同时更加深入的了解掌握二叉树。本系列文章将着重介绍一般二叉树、完全二叉树、满二叉树、线索二叉树、霍夫曼树、二叉排序树、平衡二叉树、红黑树、B树。希望各位读者能够关注专题并给出相应意见通过系列的学习做到心中有“树”。 1 重点概念 1.1 结点概念 结点是数据结构中的基础是构成复杂数据结构的基本组成单位。 1.2 树结点声明 本系列文章中提及的结点专指树的结点。例如结点A在图中表示为 2 树 2.1 定义 树Tree是nn0)个结点的有限集。n0时称为空树。在任意一颗非空树中 1有且仅有一个特定的称为根Root的结点 2当n1时其余结点可分为m(m0)个互不相交的有限集T1、T2、…、Tn其中每一个集合本身又是一棵树并且称为根的子树。 此外树的定义还需要强调以下两点 1n0时根结点是唯一的不可能存在多个根结点数据结构中的树只能有一个根结点。 2m0时子树的个数没有限制但它们一定是互不相交的。 示例树 图2.1为一棵普通的树 由树的定义可以看出树的定义使用了递归的方式。递归在树的学习过程中起着重要作用如果对于递归不是十分了解建议先看看递归算法 2.2 结点的度 结点拥有的子树数目称为结点的度。 图2.2中标注了图2.1所示树的各个结点的度。 2.3 结点关系 结点子树的根结点为该结点的孩子结点。相应该结点称为孩子结点的双亲结点。 图2.2中A为B的双亲结点B为A的孩子结点。 同一个双亲结点的孩子结点之间互称兄弟结点。 图2.2中结点B与结点C互为兄弟结点。 2.4 结点层次 从根开始定义起根为第一层根的孩子为第二层以此类推。 图2.3表示了图2.1所示树的层次关系 2.5 树的深度 树中结点的最大层次数称为树的深度或高度。图2.1所示树的深度为4。 3 二叉树 3.1 定义 二叉树是n(n0)个结点的有限集合该集合或者为空集称为空二叉树或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。 图3.1展示了一棵普通二叉树 3.2 二叉树特点 由二叉树定义以及图示分析得出二叉树有以下特点 1每个结点最多有两颗子树所以二叉树中不存在度大于2的结点。 2左子树和右子树是有顺序的次序不能任意颠倒。 3即使树中某结点只有一棵子树也要区分它是左子树还是右子树。 3.3 二叉树性质 1在二叉树的第i层上最多有2i-1 个节点 。i1 2二叉树中如果深度为k,那么最多有2k-1个节点。(k1 3n0n21 n0表示度数为0的节点数n2表示度数为2的节点数。 4在完全二叉树中具有n个节点的完全二叉树的深度为[log2n]1其中[log2n]是向下取整。 5若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号则对完全二叉树中任意一个编号为 i 的结点有如下特性 (1) 若 i1则该结点是二叉树的根无双亲, 否则编号为 [i/2] 的结点为其双亲结点; (2) 若 2in则该结点无左孩子 否则编号为 2i 的结点为其左孩子结点 (3) 若 2i1n则该结点无右孩子结点 否则编号为2i1 的结点为其右孩子结点。 3.4 斜树 斜树所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。 3.5 满二叉树 满二叉树在一棵二叉树中。如果所有分支结点都存在左子树和右子树并且所有叶子都在同一层上这样的二叉树称为满二叉树。 满二叉树的特点有 1叶子只能出现在最下一层。出现在其它层就不可能达成平衡。 2非叶子结点的度一定是2。 3在同样深度的二叉树中满二叉树的结点个数最多叶子数最多。 3.6 完全二叉树 完全二叉树对一颗具有n个结点的二叉树按层编号如果编号为i(1in)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同则这棵二叉树称为完全二叉树。 图3.5展示一棵完全二叉树 特点 1叶子结点只能出现在最下层和次下层。 2最下层的叶子结点集中在树的左部。 3倒数第二层若存在叶子结点一定在右部连续位置。 4如果结点度为1则该结点只有左孩子即没有右子树。 5同样结点数目的二叉树完全二叉树深度最小。 注满二叉树一定是完全二叉树但反过来不一定成立。 3.7 二叉树的存储结构 3.7.1 顺序存储 二叉树的顺序存储结构就是使用一维数组存储二叉树中的结点并且结点的存储位置就是数组的下标索引。 图3.6所示的一棵完全二叉树采用顺序存储方式如图3.7表示 由图3.7可以看出当二叉树为完全二叉树时结点数刚好填满数组。 那么当二叉树不为完全二叉树时采用顺序存储形式如何呢例如对于图3.8描述的二叉树 其中浅色结点表示结点不存在。那么图3.8所示的二叉树的顺序存储结构如图3.9所示 其中∧表示数组中此位置没有存储结点。此时可以发现顺序存储结构中已经出现了空间浪费的情况。 那么对于图3.3所示的右斜树极端情况对应的顺序存储结构如图3.10所示 由图3.10可以看出对于这种右斜树极端情况采用顺序存储的方式是十分浪费空间的。因此顺序存储一般适用于完全二叉树。 3.7.2 二叉链表 既然顺序存储不能满足二叉树的存储需求那么考虑采用链式存储。由二叉树定义可知二叉树的每个结点最多有两个孩子。因此可以将结点数据结构定义为一个数据和两个指针域。表示方式如图3.11所示 则图3.6所示的二叉树可以采用图3.12表示。 图3.12中采用一种链表结构存储二叉树这种链表称为二叉链表。 3.8 二叉树遍历 二叉树的遍历一个重点考查的知识点。 3.8.1 定义 二叉树的遍历是指从二叉树的根结点出发按照某种次序依次访问二叉树中的所有结点使得每个结点被访问一次且仅被访问一次。 二叉树的访问次序可以分为四种 前序遍历 中序遍历 后序遍历 层序遍历 3.8.2 前序遍历 前序遍历通俗的说就是从二叉树的根结点出发当第一次到达结点时就输出结点数据按照先向左在向右的方向访问。 图3.13所示二叉树访问如下 从根结点出发则第一次到达结点A故输出A; 继续向左访问第一次访问结点B故输出B 按照同样规则输出D输出H 当到达叶子结点H返回到D此时已经是第二次到达D故不在输出D进而向D右子树访问D右子树不为空则访问至I第一次到达I则输出I I为叶子结点则返回到DD左右子树已经访问完毕则返回到B进而到B右子树第一次到达E故输出E 向E左子树故输出J 按照同样的访问规则继续输出C、F、G 则3.13所示二叉树的前序遍历输出为 ABDHIEJCFG 3.8.3 中序遍历 中序遍历就是从二叉树的根结点出发当第二次到达结点时就输出结点数据按照先向左在向右的方向访问。 图3.13所示二叉树中序访问如下 从根结点出发则第一次到达结点A不输出A继续向左访问第一次访问结点B不输出B继续到达DH 到达HH左子树为空则返回到H此时第二次访问H故输出H H右子树为空则返回至D此时第二次到达D故输出D 由D返回至B第二次到达B故输出B 按照同样规则继续访问输出J、E、A、F、C、G 则3.13所示二叉树的中序遍历输出为 HDIBJEAFCG 3.8.4 后序遍历 后序遍历就是从二叉树的根结点出发当第三次到达结点时就输出结点数据按照先向左在向右的方向访问。 图3.13所示二叉树后序访问如下 从根结点出发则第一次到达结点A不输出A继续向左访问第一次访问结点B不输出B继续到达DH 到达HH左子树为空则返回到H此时第二次访问H不输出H H右子树为空则返回至H此时第三次到达H故输出H 由H返回至D第二次到达D不输出D 继续访问至II左右子树均为空故第三次访问I时输出I 返回至D此时第三次到达D故输出D 按照同样规则继续访问输出J、E、B、F、G、CA 则图3.13所示二叉树的后序遍历输出为 HIDJEBFGCA 虽然二叉树的遍历过程看似繁琐但是由于二叉树是一种递归定义的结构故采用递归方式遍历二叉树的代码十分简单。 递归实现代码如下 /*二叉树的前序遍历递归算法*/ void PreOrderTraverse(BiTree T) {if(TNULL)return;printf(%c, T-data); /*显示结点数据可以更改为其他对结点操作*/PreOrderTraverse(T-lchild); /*再先序遍历左子树*/PreOrderTraverse(T-rchild); /*最后先序遍历右子树*/ }/*二叉树的中序遍历递归算法*/ void InOrderTraverse(BiTree T) {if(TNULL)return;InOrderTraverse(T-lchild); /*中序遍历左子树*/printf(%c, T-data); /*显示结点数据可以更改为其他对结点操作*/InOrderTraverse(T-rchild); /*最后中序遍历右子树*/ }/*二叉树的后序遍历递归算法*/ void PostOrderTraverse(BiTree T) {if(TNULL)return;PostOrderTraverse(T-lchild); /*先后序遍历左子树*/PostOrderTraverse(T-rchild); /*再后续遍历右子树*/printf(%c, T-data); /*显示结点数据可以更改为其他对结点操作*/ }3.8.5 层次遍历 层次遍历就是按照树的层次自上而下的遍历二叉树。针对图3.13所示二叉树的层次遍历结果为 ABCDEFGHIJ 3.8.6 遍历常考考点 对于二叉树的遍历有一类典型题型。 1已知前序遍历序列和中序遍历序列确定一棵二叉树。 例题若一棵二叉树的前序遍历为ABCDEF中序遍历为CBAEDF请画出这棵二叉树。 分析前序遍历第一个输出结点为根结点故A为根结点。早中序遍历中根结点处于左右子树结点中间故结点A的左子树中结点有CB右子树中结点有EDF。 如图3.14所示 按照同样的分析方法对A的左右子树进行划分最后得出二叉树的形态如图3.15所示 2已知后序遍历序列和中序遍历序列确定一棵二叉树。 后序遍历中最后访问的为根结点因此可以按照上述同样的方法找到根结点后分成两棵子树进而继续找到子树的根结点一步步确定二叉树的形态。 注已知前序遍历序列和后序遍历序列不可以唯一确定一棵二叉树。 4 结语 通过上述的介绍已经对于二叉树有了初步的认识。本篇文章介绍的基础知识希望读者能够牢牢掌握并且能够在脑海中建立一棵二叉树的模型为后续学习打好基础。
http://www.huolong8.cn/news/329047/

相关文章:

  • 南浔建设局网站天津网站制作网页
  • 建微信网站wordpress请求排除
  • 室内设计招标网站做网站用什么源码好
  • 电器网站建设规划书wordpress 多后端
  • 南充网站开发唐山营销型网站建设
  • 台州网站建设网站推广成都网站建设司
  • win2012服务器网站建设广告设计公司核心优势
  • wordpress搜索过滤怀化网站优化哪里有
  • 制作网站公司网址邵武网站建设
  • 沈阳企业黄页免费哈尔滨做网站优化
  • 做视频的教学直播网站网站建设的困难
  • 做网站和app多少费用怎么样把网站做火
  • 深圳网站建设优化czzhwmwordpress生成微信小程序
  • 班级网站 php如何查看网站的空间
  • 石家庄建站模板源码wordpress更换主题菜单
  • 如何自己做的网站外包软件开发
  • 2017最新网站设计风格重庆网站建站价格
  • 佛山网站建设推广厂商排名seo网站排名推广
  • 哪里有网站开发培训小程序怎么开
  • 衡水手机网站建设公司wordpress文章页跳转空白
  • 做销售网站多少钱四川建设网官网入口
  • 网站建设书籍 知乎苏州论坛型网站建设
  • 网站上面的图片是怎么做的安平有做网站推广的吗
  • 网站备案大概需要多久seo网络营销推广公司深圳
  • 网站建设英语wordpress 栏目 伪静态化
  • 网站开发 居易国际网站怎样优化seo
  • 外贸网站模板外贸网站建设做网站公司什么条件
  • 陕西新站seo网页编辑器绿色版
  • 网站制作合同书wordpress标签组合
  • 东道设计logoseo新手教程