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

数据结构第8问:什么是树?

【本节仅描述树的定义、术语以及相关性质】

定义

树是由若干个结点组成的有限集合。具有如下特征:

  1. 有且仅有一个根结点;
  2. 除根结点外,每个其它结点有且仅有一个直接的父结点;
  3. 除根结点外,每个结点可以有零个或者多个子结点;
  4. 结点之间通过边连接,形成层级关系,且不存在环路。

当有限集合内的元素数大于1时,除根结点外的其余结点可以分为 m(m>0) 个互不相交的有限集,其中每个有限集合本身又是一棵树,并且称为根的子树。

从递归角度来看:

  • 一棵树要么是空树(没有任何节点);
  • 要么由一个根节点和零个或多个子树组成,而这些子树本身又是树。

术语

根节点 :树的起始节点,没有父节点。

父节点,子节点 :结点之间的直接上下级关系。

叶节点 :没有子节点的结点。叶节点的度为0。

分支节点:有子结点的结点称为分支结点。度大于0。

:一个结点的子节点个数。

层次、深度、高度 :结点的层次从根开始定义,根结点为第1层,它的子结点为第2层,以此类推。结点的深度就是结点所在的层次。树的高度或深度是树中结点的最大层数。结点的高度是以该节点为根的子树的高度。

子树(subtree) :以某个结点为根结点的树。

路径:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的。

路径长度:是路径中所经过的边的数目(即节点数减一)。

说法含义
两结点间的路径长度连接两个结点路径中的边数
树的路径长度(内部路径长度)树中所有结点到根节点路径长度的总和
树的直径(最大路径长度)树中两个结点间最长路径的边数

树的性质

1.树的结点数n等于所有结点的度数之和加1
令一棵树的总结点数为n,那么总度数为n−1,不同度数的结点的数量为nm,m为度数下标,那么n=n0+n1+n2+...+nm=∑i=0mni再求每个不同度数的结点的总度数为m∗nm,那么n−1=1n1+2n2+3n3+...+mnm=∑i=1mini得到:n=∑i=1mini+1=∑i=0mni 令一棵树的总结点数为n,那么总度数为n-1,不同度数的结点的数量为n_m,m为度数下标,那么\\ n = n_0 + n_1 + n_2 + ... + n_m = \sum_{i=0}^m n_i \\ 再求每个不同度数的结点的总度数为m*n_m,那么\\ n - 1 = 1n_1 + 2n_2+ 3n_3 + ... + mn_m = \sum_{i=1}^m in_i \\ 得到:n = \sum_{i=1}^m in_i + 1 = \sum_{i=0}^m n_i 令一棵树的总结点数为n,那么总度数为n1,不同度数的结点的数量为nm,m为度数下标,那么n=n0+n1+n2+...+nm=i=0mni再求每个不同度数的结点的总度数为mnm,那么n1=1n1+2n2+3n3+...+mnm=i=1mini得到:n=i=1mini+1=i=0mni
由上述推导过程,可以看出,当计算树的总度数的时候,叶节点(没有子节点的结点)是没有贡献的,因为按照计算公式,叶结点的总度数为0。但是当计算总结点数的时候是有的。所以,可以借助最后推导出的公式来计算叶结点的结点数,计算如下:
由于已知:∑i=1mini+1=∑i=0mni然后对等号右边部分提取出n0,得到∑i=0mni=n0+∑i=1mni,等效替换回原式得到∑i=1mini+1=n0+∑i=1mni化简n0=∑i=1mini−∑i=1mni+1=∑i=1m(i−1)ni+1 由于已知:\sum_{i=1}^m in_i + 1 = \sum_{i=0}^m n_i \\ 然后对等号右边部分提取出n_0,得到\\ \sum_{i=0}^m n_i = n_0 + \sum_{i=1}^m n_i,等效替换回原式得到\\ \sum_{i=1}^m in_i + 1 = n_0 + \sum_{i=1}^m n_i \\ 化简\\ n_0 = \sum_{i=1}^m in_i - \sum_{i=1}^m n_i + 1 = \sum_{i=1}^m (i-1)n_i + 1 由于已知:i=1mini+1=i=0mni然后对等号右边部分提取出n0,得到i=0mni=n0+i=1mni,等效替换回原式得到i=1mini+1=n0+i=1mni化简n0=i=1minii=1mni+1=i=1m(i1)ni+1
2.度为 m 的树中第 i 层上至多有m的(i - 1)次方个结点(i ≥ 1)

已知第一层只有一个结点为根结点;那么第2层至多就有 m 个结点,那么第3层至多就有 m² 个结点,归纳推导出
第i层的结点数≤mi−1,其中(i≥1) 第i层的结点数 ≤ m^{i-1} ,其中(i≥1) i层的结点数mi1,其中(i1)
3.高度为h的m叉树至多有 (m^h - 1)/(m - 1) 个结点

如果要让m叉树的结点数达到最大,那么除第一层外,每层的结点数都应满足 n_h = m^(h-1),计算总结点数为
N=1+m1+m2+m3+...+mh−1=(mh−1)/(m−1) N = 1 + m^1 + m^2 + m^3 + ... + m^{h-1} = (m^h-1)/(m-1) N=1+m1+m2+m3+...+mh1=(mh1)/(m1)
4.度为 m,具有 n 个结点的树的最大高度 h 为 (n - m + 1)

因为已知度为m,那么树中至少有一个结点的子结点数为m;要为了使树的高度最大,度为m的结点的子结点位于同一层,其它层则只放置1个结点。

举例:

  1. 根结点 – 度数为1的子结点 – 度数为1的子结点 – … – 度数为m的子结点
  2. 根结点 – 度数为1的子结点 – 度数为m的子结点 – … – 度数为1的子结点

5.度为 m、具有 n 个结点的树的最小高度 h 为[ log_m (n * ( m - 1 ) + 1 ) ]

首先已知:要使一棵树的高度尽量小,那么每层(除第一层和最后一层)的结点数都应满足性质2。第一层是根结点,最后一层只要有结点就行,不一定要填满。

再借助性质3可以推导出:
当树的高度取得最小高度h的时候:总的结点数最多为(mh−1)/(m−1)最少为(mh−1−1)/(m−1)+1。可得到下列不等式:(mh−1−1)/(m−1)<n≤(mh−1)/(m−1) 当树的高度取得最小高度h的时候:\\总的结点数\\最多为 (m^h - 1)/(m - 1) \\最少为(m^{h-1} - 1)/(m - 1) + 1。\\ 可得到下列不等式: (m^{h-1} - 1)/(m - 1) < n ≤ (m^h - 1)/(m - 1) 当树的高度取得最小高度h的时候:总的结点数最多为(mh1)/(m1)最少为(mh11)/(m1)+1可得到下列不等式:(mh11)/(m1)<n(mh1)/(m1)
然后要明确,求最小高度的位置应该是结点数最多的位置,防止错误的估计高度。因此得到如下临界状态
n=(mh−1)/(m−1)hmin是整数,向上取整取最小值,求解得:hmin=⌈logm(n(m−1)+1)⌉ n = (m^h - 1)/(m - 1)\\ h_{min}是整数,向上取整取最小值,求解得:\\ h_{min} = ⌈log_m (n(m−1)+1)⌉ n=(mh1)/(m1)hmin是整数,向上取整取最小值,求解得:hmin=logm(n(m1)+1)⌉

**森林中有k颗树,总结点数为n,总边数为e,那么 k = n - e。或者说森林中结点数不变,边数减少 1,则森林中的树的棵数增加 1 **

在一棵中,结点数为 n,边数必然是 n−1。森林是若干棵树的集合,因此森林中包含若干棵互不连通的子树。设森林中结点数为 n,边数为 e,树的棵数为 k,则有:树的棵数 k = n − e

推导:
每棵树单独结点数为ni,对应边数为ni−1森林中所有树的结点数和为:∑i=1kni=n森林中所有树的边数和为:e=∑i=1k(ni−1)=∑i=1kni−k=n−k所以森林中树的棵树k=n−e 每棵树单独结点数为 n_i,对应边数为 n_i−1 \\ 森林中所有树的结点数和为:\sum_{i=1}^k n_i = n \\ 森林中所有树的边数和为:e = \sum_{i=1}^k(n_i - 1) = \sum_{i=1}^kn_i - k = n - k \\ 所以森林中树的棵树k = n - e 每棵树单独结点数为ni,对应边数为ni1森林中所有树的结点数和为:i=1kni=n森林中所有树的边数和为:e=i=1k(ni1)=i=1knik=nk所以森林中树的棵树k=ne

http://www.dtcms.com/a/319125.html

相关文章:

  • 深入理解String类:揭秘Java字符串常量池的优化机制
  • word生成问题总结
  • 【智能协同云图库】第六期:基于 百度API 和 Jsoup 爬虫实现以图搜图
  • 北京-4年功能测试2年空窗-报培训班学测开-第七十天-面试第一天
  • 国内主流数据集成厂商有哪些?有那些免费的数据集成平台?
  • 容器 vs 虚拟机
  • 机器学习核心算法与实践要素(全篇)
  • 汽车流通行业4S门店生存性指标:零服吸收率
  • 0基础法考 单选50条错题总结
  • 安卓系统属性之androidboot.xxx转换成ro.boot.xxx
  • 分布式面经
  • 虚幻GAS底层原理解剖七 (ASC)
  • Day 6: CNN卷积神经网络 - 计算机视觉的核心引擎
  • 多场景两阶段分布式鲁棒优化模型、数据驱动的综合能源系统
  • PostgreSQL面试题及详细答案120道(61-80)
  • 59.螺旋矩阵II
  • 恒虚警检测(CFAR)仿真:杂波边缘与多目标场景分析
  • 目标检测数据集 - 疟疾检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 微算法科技(NASDAQ:MLGO)利用集成学习方法,实现更低成本、更稳健的区块链虚拟货币交易价格预测
  • RocketMQ概览
  • Kotlin中String的==相等比较符
  • STM32HAL 快速入门(一):点灯前的准备 —— 从软件安装到硬件原理
  • 利用微软SQL Server数据库管理员(SA)口令为空的攻击活动猖獗
  • 思途spring学习0807
  • Java -- Arrays类-- System类-- BigInteger和BigDecimal类
  • 串口通信02 温度传感DS18B20 01 day49
  • jetson上使用opencv的gstreamer进行MIPI和USB摄像头的连接以及udp推流
  • JAVA,Maven分模块设计
  • 语言模型(LM):n-gram模型原理与困惑度(Perplexity)计算详解
  • B-树与B+树