ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【数据结构-树&图】树和图的性质

2022-07-31 23:02:37  阅读:160  来源: 互联网

标签:树和图 结点 连通 mh 二叉树 n1 数据结构 2h 性质


【注意】不要死记结论,理解推导过程及其背后的思路更重要!

目录

1 树的性质

1.1 非平凡树的性质

  • 总结点数 = 总度数 + 1(等价于:总结点数 = 总边数/总分支数 + 1)(等价于:若结点总数为 n,则边的数量为 n-1)

【证明】每个结点的度数等于其子结点的个数,即等于与它相连的下一层结点的个数,因此可以推得:某一层的总度数等于下一层结点数的个数。假设一棵树的高度为 h 层,把第 1 层、第 2 层、……、第 h-1 层的总度数加起来,得到的是整棵树中,除了根节点以外的总结点数,因此最后的结果需加 1

【推论】对于二叉树,每个结点有 2 个指针域,一个非空指针域对应一个分支(一条边),因此,n 个结点的二叉树有 n-1 个非空指针域,因而可以得知空指针域 = 2n - (n-1) = n+1

  • 度为 m 的树中,第 i 层最多有mi-1个结点

【例】对于二叉树,第 2 层最多有 22-1 = 21 = 2 个结点,第 5 层最多有 25-1 = 24 = 16 个结点;对于三叉树,第 2 层最多有 32-1 = 31 = 3 个结点,第 5 层最多有 35-1 = 34 = 81 个结点

  • 高度为 h 的 m 叉树的最多有(mh-1)/(m-1)个结点,最少有 h 个结点

【证明】最多的情况:m 叉树每一层都排满结点,形成一个满 m 叉树,则结点数一共有S = mh-1 + mh-2 + ... + m2 + m1 + m0 = (mh-1)/(m-1)

最少的情况:每一层都只有 1 个结点

  • 高度为 h、度为 m 的树最多有(mh-1)/(m-1)个结点,最少有h+m-1个结点

【证明】最多的情况:度为 m 的树每一层都排满结点,则结点数一共有S = mh-1 + mh-2 + ... + m2 + m1 + m0 = (mh-1)/(m-1)

最少的情况:h-1 层都只有 1 个结点,最后一层有 m 个结点

思考:为什么以上两条性质的条件看起来类似,但结论不一样?

  • 具有 n 个结点的 m 叉树的最小高度为logm(n(m-1)+1)(向上取整)

【证明】要使得高度最小,那么让 m 叉树的每一层都尽可能地排满结点。因此,前 h-1 层排满了所有的结点,结点总个数为S = mh-2 + mh-3 + ... + m2 + m1 + m0 = (mh-1-1)/(m-1);对于最后的第 h 层,可以有 1 个到 mh-1 (全部排满)个结点。

所以,一棵 m 叉树的总结点数的范围为(mh-1-1)/(m-1)+1 ≤ n ≤ (mh-1-1)/(m-1)+mh-1,即(mh-1-1)/(m-1) < n ≤ (mh-1)/(m-1),反解出 h 的范围得到:logm(n(m-1)+1) ≤ h < logm(n(m-1)+1)+1,由于 h 是正整数,因此 h 的取值为logm(n(m-1)+1)(向上取整)

1.2 非空二叉树的性质

  • 非空二叉树上的叶子结点数(n0)等于度为 2 的结点数(n2)加 1,即n0 = n2 + 1

【证明】设度为 0, 1 和 2 的结点个数分别为 n0, n1, n2,结点总数为n = n0 + n1 + n2,而总度数为B = n1 + 2n2。由结论“总结点数 = 总度数 + 1”可知,n = B + 1,代入得n0 + n1 + n2 = n1 + 2n2 + 1,化简得n0 = n2 + 1

  • 非空二叉树中,第 i 层最多有2i-1个结点

【例】对于非空二叉树,第 2 层最多有 22-1 = 21 = 2 个结点,第 5 层最多有 25-1 = 24 = 16 个结点

  • 高度为 h 的非空二叉树的最多有2h-1个结点,最少有 h 个结点

【证明】最多的情况:二叉树每一层都排满结点,形成一个满二叉树,则结点数一共有S = 2h-1 + 2h-2 + ... + 22 + 21 + 20 = 2h-1;最少的情况:每一层都只有 1 个结点

1.3 完全二叉树的性质

  • 对于高为 h 的完全二叉树,叶子结点只可能出现在第 h-1 层和第 h 层
  • 若完全二叉树的一个编号为 i 的结点有左右孩子,则左孩子编号为 2i,右孩子编号为 2i+1

【推论】若完全二叉树的一个编号为 i 的结点有父节点且为父节点的左孩子,则父节点编号为 i/2;若为父节点的右孩子,则父节点编号为 (i-1)/2

  • 结点 i 所在层数为log2i(向下取整)+1

【证明】设结点 i 位于第 h 层,则从第 1 层到第 h-1 层的结点总数为2h-1-1,若结点 i 位于第 h 层的第一个位置,则i = 2h-1;若结点 i 位于第 h 层的最后一个位置,则i = 2h-1。所以 i 的取值范围为2h-1 ≤ i < 2h,反解出 h 的范围:log2i < h ≤ log2i+1,由于 i 是正整数,因此 i 的取值为log2i(向下取整)+1

  • 若有度为 1 的结点,则只可能有一个,且该结点只有左孩子而没有右孩子
  • 设完全二叉树有 n 个结点,当 n 为奇数时,没有度为 1 的结点;当 n 为偶数时,有且仅有一个度为 1 的结点

【证明】设度为 0, 1 和 2 的结点个数分别为 n0, n1, n2,则结点总数为n = n0 + n1 + n2 = (n2 + 1) + n1 + n2 = 2n2 + n1 + 1,求解出n1 = n - 2n2 - 1,注意到 2n2-1 为奇数,又因为 n1 取值只可能为 0 或 1,因此当 n 为奇数时,n1 为偶数,即为 0;当 n 为偶数时,n1 为奇数,即为 1

  • 具有 n 个结点的完全二叉树的高度为log2(n+1)(向上取整)log2n(向下取整)+1

【证明 1】考虑一个高为 h-1 的满二叉树,其结点总数为2h-1-1;考虑一个高为 h 的满二叉树,其结点总数为2h-1。那么一棵高为 h 的完全二叉树的结点总数 n 应位于这两者之间:2h-1-1 < n ≤ 2h-1,反解出 h 的范围:log2(n+1) ≤ h < log2(n+1)+1,由于 h 是正整数,因此 h 的取值为log2(n+1)(向上取整)

【证明 2】考虑一个高度为 h-1 的满二叉树,其结点总数为2h-1-1,那么高度为 h 的完全二叉树的最少结点个数就是在上式基础上加 1,即2h-1;而最多结点个数就是将第 h 层全部排满,即2h-1。因此一棵高为 h 的完全二叉树的结点总数 n 应位于这两者之间:2h-1 ≤ n < 2h,反解出 h 的范围:log2n < h ≤ log2n+1,由于 h 是正整数,因此 h 的取值为log2n(向下取整)+1

1.4 森林的性质

  • “左孩子右兄弟”:二叉树结点的左孩子是原森林(树)中结点的孩子,二叉树结点的右孩子是原森林(树)中结点的兄弟

设森林 F 对应的二叉树为 B,对应的树为 T,转换规则为“左孩子右兄弟”,则有:

  • 若 B 的左子树结点总数有 m 个,右子树结点总数为 n 个,则 F 的第一棵树的结点总数为 m+1 个,F 的其他子树的结点总数为 n 个
  • F 或 T 的叶结点对应于 B 中没有左孩子的结点

【证明】由“左孩子右兄弟”规则可知,二叉树结点的左孩子是原森林(树)中结点的孩子。而现在森林(树)的叶结点是没有孩子的,因此对应的二叉树结点也没有左孩子

  • 如果在 B 中结点 i 是父结点的右孩子,则在 T 或 F 中结点 i 一定有左兄弟

【证明】在 B 中结点 i 是父结点的右孩子,即父结点的右孩子为结点 i,意味着对应的 T 或 F 中父结点和结点 i 是兄弟关系,也就是说,结点 i 左兄弟是父结点

1.5 树、二叉树、森林的遍历性质

  • 树的先根遍历 = 二叉树的先序遍历 = 森林的先根遍历(相当于依次对森林的每棵树进行先根遍历)
  • 树的后根遍历 = 二叉树的中序遍历 = 森林的后根遍历(相等于依次对森林的每棵树进行后根遍历)

2 图的性质

2.1 无向图的性质

  • n 个顶点、e 条边的无向图的度:∑TD = 2e

【注意】若设图中度为 0, 1, 2, 3 的结点个数分别为 n0, n1, n2, n3,则∑TD = 2e = n1 + 2n2 + 3n3

  • n 个顶点的简单完全无向图的边数:n(n-1)/2
  • 如果 n 个顶点的无向图是非连通图,则最少有 n-1 条边,最多有n(n-1)/2 + 1条边

【证明】非连通图的边最多的情况是:由 n-1 个顶点构成的完全无向图有 n(n-1)/2 条边,此时再加入一条边,将最后一个顶点与其他任意一个顶点连接,就得到了n(n-1)/2 + 1条边,注意此时的无向图从完全图变为了非连通图

【推论 1】(条件、结论倒置)若无向图的边数小于 n-1 条,则必为非连通图

【推论 2】若一个图有 n 个顶点,且有大于 n-1 条边,则此图一定有环(或称为回路)

  • 无向图中的极大连通子图称为连通分量。一个非连通无向图一定有两个或以上的连通分量
  • 生成树:连通图的极小连通子图构成了生成树;生成森林:非连通图的连通分量的极小连通子图构成了生成森林

【注意】“极大连通子图”包含了连通分量所有顶点和所有边;“极小连通子图”包含了连通分量所有顶点和(使得子图连通的)最少边数

2.2 有向图的性质

  • n 个顶点、e 条边的有向图的度:∑TD = ∑ID + ∑OD = e + e = 2e
  • n 个顶点的简单完全有向图的边数:n(n-1)
  • 若 n 个顶点的有向图是强连通图,那么边数最少有 n 条(形成一个环路)
  • 有向图中的极大强连通子图称为强连通分量

2.3 存储结构的性质

  • 无向图的邻接矩阵:行或列表示顶点的度
  • 有向图的邻接矩阵:行表示出度,列表示入度
  • 邻接矩阵为 A,则 An[i][j] 表示顶点 i 到顶点 j 的长度为 n 的路径数
  • 有向图的邻接表,其边表存储的是出边表(出度)
---EOF---

标签:树和图,结点,连通,mh,二叉树,n1,数据结构,2h,性质
来源: https://www.cnblogs.com/Mount256/p/16538499.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有