C语言_数据结构总结9:树的基础知识介绍

1. 树的基本术语
- 祖先:考虑结点K,从根A到结点K的唯一路径上的所有其它结点,称为结点K的祖先。
- 子孙:结点B是结点K的祖先,结点K是B的子孙。结点B的子孙包括:E,F,K,L。
- 双亲:路径上最接近结点K的结点称为结点K的双亲。根A是树中唯一没有双亲的结点。
- 孩子:k为E的孩子。
- 兄弟:有相同双亲的称为兄弟。如K和L。
- 堂兄弟:双亲在同一层的结点称为堂兄弟。
- 结点的度:树中一个结点的孩子个数,称为该节点的度
- 树的度:树中结点的最大度数为树的度
- 分支结点/非终端结点:度大于0的结点
在分支结点/非终端结点中,每个结点的分支数就是该结点的度
- 叶结点:度为0的结点
- 结点的层次:从树根开始定义,根结点为第一层,它的孩子为第二层,如何以此类推
- 树的深度/高度:树中结点的最大层数
- 结点的高度:以该结点为根的`子树的高度`
- 有序树:树中结点的各子树从左到右都是有次序的,不能互换
- 无序树:有序树以外的树
- 路径:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的
- 路径长度:路径上所经过的边的个数
根到每个结点的路径长度的最大值应是树的高度减1
- 森林:是 m (m>=0) 棵互不相交的树的集合。
只要把一棵树的根结点删去就成了森林,反之,只要给m棵独立的树加上一个结点,并把这m棵树作为该结点的子树,则森林变成了树。
2. 树的性质
1. 树的结点数n等于所有结点的度数之和+1
类推:n = 树中所有的边数之和 + 1
2. m叉树中第i层上至多有 m^(i-1) 个结点(i>=1)
3. 高度为h的m叉树至多有 (m^h-1)/(m-1) 个结点
当各层结点数达到最大时,树中至多有1+m+m^2+……+m^h-1=(m^h-1)/(m-1)个结点
4. 度为m,结点为n的树,最小高度 h = logm(m(n-1)+1)。即让每层的结点数都达到最大时
5. 度为m,结点为n的树,最小高度 h = n - m + 1。即除了最底层,前h-1层都只有一个结点
3. 二叉树
- 与树相似,二叉树也以递归的形式定义,二叉树是n(n>=0)个结点的有限集合:
1. 可以为空二叉树,即n=0
2. 可以由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树
- 注意,二叉树是一种特殊的树形结构,其特点是每个结点至多有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒,若将次序颠倒了,则成为了另一棵不同的二叉树,另外即使树中结点只有一棵子树,也要区分它是左子树还是右子树。
- 二叉树 不等于 度为2的有序树
1. 度为2的有序树至少要有3个结点,但二叉树可以为空。
2. 度为2的有序树的左右结点是相对而言的,若某个结点只有一个孩子,则无需区分左右次序,但二叉树在这种情况下就要进行区分。即二叉树的结点次序不是相对于另一个结点而言的,而是确定的。
- 二叉树的性质
1. 非空二叉树上的叶结点树等于度为2的结点数+1
2. 非空二叉树的第i层最多有 2^(i-1) 个结点(i>=1)
3. 高度为h的二叉树,最多有 2^h-1 个结点
4. 满二叉树
- 一棵高度为h,且有 2^(h-1) 个结点的二叉树称为满二叉树,即二叉树的每层都含有最多的结点。
- 特点:
1. 叶结点都集中在二叉树的最下面一层
2. 除叶结点外,每个结点度数均为2
- 按层序编号:约定编号从根结点开始(根结点编号为1)起,自上而下,自左向右。
每个结点对应一个编号,对应编号为i的结点,若有双亲,则其双亲 |i/2| ,若有左孩子,则左孩子为2i,若有右孩子,右孩子编号为2i+1
5. 完全二叉树
- 高度为h,有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中的编号为1~n的结点一一对应时,称为完全二叉树
- 特点:
1. 若i<=|n/2|,则结点i为分支结点,否则为叶结点
树中除了分叉节点就是叶结点,这句话对吗?
这句话不完全对。
在树结构中,节点通常分为内部节点(也称为分支节点)和叶节点。分支节点是有子节点的节点,叶节点是没有子节点的节点。然而,还有一种特殊情况,即树中只有一个根节点,它既不是分支节点(因为没有父节点),也不是叶节点(因为在一般定义下,叶节点是根节点的后代,且没有子节点)。所以树中除了分叉节点和叶结点外,在特殊情况下还可能存在单独的根节点。因此,“树中除了分叉节点就是叶结点” 这句话是不对的。
2. 叶结点只可能在层次最大的两层上出现。对于最大层次中的叶结点,都依次排列在该层的最左边的位置上。
3. 若有度为1的结点,则最多只可能有1个,且该结点只有左孩子无右孩子
4. 按层序编号后,一旦出现某结点的编号i为叶结点或只有左孩子,则编号大于i的结点均为叶结点
5. 若n为奇数,则每个分支结点都有左右孩子;若为偶数,则除了编号最大的分支结点只有左孩子无右孩子,其余结点都有左右孩子
6. 当i>1时,结点i的双亲结点的编号为|i/2|,如果有左右孩子,则左孩子编号为2i,右孩子编号为2i+1
7. 结点i所在的层次(深度)为 |log2(i)| + 1
8. 具有n个结点的完全二叉树的高度为log2(n+1) 或 log2(n) + 1;
6. 二叉排序树
- 左子树上所有结点的关键字均小于根结点的关键字;右子树上所有结点的关键字均大于根结点的关键字;左右子树又各是一棵二叉排序树
7.平衡二叉树
- 树中任意一个结点的左子树和右子树的高度之差的绝对值不超过1
8.正则二叉树
- 树中每个分支结点都有2个孩子,即树中只有度为0或2的结点
文章如有出错不足处,欢迎评论区指出,如果觉得文章不错,就给我点个赞吧,谢谢!
相关文章:
C语言_数据结构总结9:树的基础知识介绍
1. 树的基本术语 - 祖先:考虑结点K,从根A到结点K的唯一路径上的所有其它结点,称为结点K的祖先。 - 子孙:结点B是结点K的祖先,结点K是B的子孙。结点B的子孙包括:E,F,K,L。 - 双亲:路径上…...
基于ydoVr算法的车辆智能防盗系统的设计与实现
标题:基于ydoVr算法的车辆智能防盗系统的设计与实现 内容:1.摘要 随着汽车保有量的不断增加,车辆被盗问题日益严重,给车主带来了巨大的经济损失。为解决这一问题,本文旨在设计并实现基于ydoVr算法的车辆智能防盗系统。该系统综合运用传感器技…...
Python学习第十八天
Django模型 定义:模型是 Django 中用于定义数据库结构的 Python 类。每个模型类对应数据库中的一张表,类的属性对应表的字段。 作用:通过模型,Django 可以将 Python 代码与数据库表结构关联起来,开发者无需直接编写 S…...
蓝桥杯备考:图论之Prim算法
嗯。通过我们前面的学习,我们知道了,一个具有n个顶点的连通图,它的生成树包括n-1个边,如果边多一条就会变成图,少一条就不连通了 接下来我们来学一下把图变成生成树的一个算法 Prim算法,我们从任意一个结…...
min_element用法
查找字典中的最小value值 auto max_it std::min_element(my_map.begin(), my_map.end(),[](const auto& a, const auto& b) {return a.second < b.second; // 查找最小值});其中,这是一个查找最小值的自定义函数 [](const auto& a, const auto&am…...
列表动态列处理
1、在initialize()方法里,获取列表控件,添加CreateListColumnsListener监听 public void initialize(){ BillList billlist(BillList)this.getControl("billlistap"); billlist.addCreateListColumnsListener(this::beforeCreateListColumns)…...
科普:WOE编码与One-Hot编码
WOE编码是业务逻辑与统计建模的结合,适合强业务导向的场景; One-Hot编码是数据驱动的特征工程,适合追求模型性能的场景。 编码方式核心价值典型案例WOE编码保留变量预测能力,适配线性模型银行违约预测逻辑回归One-Hot编码释放特征…...
【Go语言圣经2.6】
目标 概念 GOPATH模型 GOPATH:GOPATH 是一个环境变量,指明 Go 代码的工作区路径。工作区通常包含三个目录: src:存放源代码,按照导入路径组织。例如,包 gopl.io/ch2/tempconv 应存放在 $GOPATH/src/gopl.i…...
Python的基本知识
Python是一种广泛使用的高级编程语言,以下是其基本用法的介绍: 变量与数据类型 - 变量定义:直接赋值即可创建变量,如 x 5 , name "John" 。 - 数据类型:包括 int (整数…...
QEMU源码全解析 —— 块设备虚拟化(4)
接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(3) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 类模板是创建类的模式_创建类是的模版-CSDN博客<...
34个适合机械工程及自动化专业【论文选题】
论文选题具有极其重要的意义,它直接关系到论文的质量、价值以及研究的可行性和顺利程度。选题明确了研究的具体领域和核心问题,就像给研究旅程设定了方向和目的地。例如,选择 “人工智能在医疗影像诊断中的应用” 这一选题,就确定…...
langchain框架
LangChain的架构分为多个层次,支持Python和JavaScript生态 基础层(langchain-core):提供LLM抽象接口、表达式语言(LCEL)等核心机制,支持超过70种主流模型(如GPT-4、Llama࿰…...
RHCE(RHCSA复习:npm、dnf、源码安装实验)
七、软件管理 7.1 rpm 安装 7.1.1 挂载 [rootlocalhost ~]# ll /mnt total 0 drwxr-xr-x. 2 root root 6 Oct 27 21:32 hgfs[rootlocalhost ~]# mount /dev/sr0 /mnt #挂载 mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# [rootlo…...
Mybatis3 调用存储过程
1. 数据库MySQL,user表 CREATE TABLE user (USER_ID int NOT NULL AUTO_INCREMENT,USER_NAME varchar(100) NOT NULL COMMENT 用户姓名,AGE int NOT NULL COMMENT 年龄,CREATED_TIME datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,CREATED_BY varchar(100) NOT NUL…...
解决 openeuler 系统 docker 下载慢,docker 镜像加速
一、步骤说明 1. 编辑 Docker 配置文件 Docker 的镜像源配置文件路径为 /etc/docker/daemon.json。如果该文件不存在,则需要先创建目录和文件。 # 创建目录(如果不存在) sudo mkdir -p /etc/docker# 编辑配置文件(使用 nano 或…...
HiPixel开源AI驱动的图像超分辨率的原生macOS 应用程序,使用 SwiftUI 构建并利用 Upscayl 强大的 AI 模型
一、软件介绍 文末提供程序和源码下载 HiPixel是一个开源程序基于SwiftUI构建的macOS原生应用程序,用于AI驱动的图像超分辨率,并利用Upscayl的强大AI模型。 二、软件特征 具有 SwiftUI 界面的原生 macOS 应用程序使用 AI 模型进行高质量图像放大通过 G…...
Python 正则表达式模块 re
Python 正则表达式模块 re flyfish 一、正则表达式基础 1. 什么是正则表达式? 正则表达式(Regular Expression, RE)是一种用于匹配、查找和替换文本模式的工具,由普通字符(如字母、数字)和特殊字符&…...
[RN 实践有效]Expo+cross-env配置项目环境变量
首先,从中可以看出,cross-env的主要作用是跨平台设置环境变量,而Expo项目通常通过app.config.js或.env文件来管理这些变量。需要强调安装cross-env的必要性,以及如何在package.json中正确配置脚本命令。 接下来,用户的问题是关于Expo中cross-env的详细配置,因此需要分步骤…...
缓存和客户端数据存储体系(Ark Data Kit)--- 应用数据持久化(首选项持久化、K-V、关系型数据库)持续更新中...
Core File Kit做怎删改查操作不便,用Ark Data Kit。 功能介绍 ArkData (方舟数据管理)为开发者提供数据存储、数据管理和数据同步能力,比如联系人应用数据可以保存到数据库中,提供数据库的安全、可靠以及共享访问等管…...
ES 使用geo point 查询离目标地址最近的数据
需求描述:项目中需要通过经纬度坐标查询目标地所在的行政区。 解决思路大致有种,使用es和mysql分别查询。 1、使用es进行查询 将带有经纬度坐标的省市区数据存入es中,mappings字段使用geo point类型,索引及查询dsl如下。 geo p…...
本地部署OpenManus及原理介绍
概述: 最近Minaus特别火,随后开源社区就有项目尝试复刻Minaus,项目名称为OpenManus,原理是用推理模型为决策者,将我们输入的问题进行分解后调用本地工具执行。 OpenManus安装: 本人在Ubuntu桌面版本上安装…...
高效手机检测:视觉分析技术的优势
在当今社会,手机已成为人们日常生活和工作中不可或缺的工具。然而,在某些特定场合,如考场、工作场所等,手机的使用却可能带来负面影响。因此,如何有效监测和防止在这些场合偷用手机的行为,成为了一个亟待解…...
Java 多线程编程:提升系统并发处理能力!
多线程是 Java 中实现并发任务执行的关键技术,能够显著提升程序在多核处理器上的性能以及处理多任务的能力。本文面向初级到中级开发者,从多线程的基本定义开始,逐步讲解线程创建、状态管理、同步机制、并发工具以及新兴的虚拟线程技术。每部…...
Linux实时内核稳定性案例
稳定性问题分析 RT_RUNTIME_SHARE案例死锁问题Linux-rt下卡死之hrtimer分析Linux内核宕机案例 -mmap空指针Linux Hung Task分析过程...
解决 VSCode SSH 连接报错:“REMOTE HOST IDENTIFICATION HAS CHANGED” 的问题
问题描述 在使用 VSCode 通过 SSH 连接远程服务器时,我们可能会遇到类似如下的错误日志: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! ... Offending ED25519 key in C:\Users\DELL/…...
Spring Boot配置类原理、Spring Boot核心机制理解,以及实现自动装置的底层原理
目的:从底层源码角度分析 Spring Boot 配置类以及自动装载的底层原理 文章目录 1. Spring Boot 配置类实现自动装载1.1 @Configuration注解1.2 @Configuration 注解完成 bean 注入流程图1.3 @ConfigurationProperties注解赋值2. Spring Boot的核心机制:自动装配2.1 @SpringBo…...
淘宝API vs 爬虫:合规获取实时商品数据的成本与效率对比
以下是淘宝 API 和爬虫在合规获取实时商品数据方面的成本与效率对比: 成本对比 淘宝 API 开发成本:需要申请开发者账号并获取 API 权限,部分敏感或高频访问的接口可能需要额外的审核或付费。开发过程中需要按照平台规定进行编程,相…...
01-Canvas-使用fabric初始
fabric官网: https://fabric5.fabricjs.com/demos/ 创建画布并绘制 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…...
CMake简单入门
简介 CMake 是一个开源的跨平台构建系统生成工具,旨在简化和自动化项目的构建过程。它主要用于管理和控制软件构建的过程,特别是在处理复杂的项目结构和多个平台时。CMake 并不直接进行编译或链接,而是生成本地构建系统所需的文件࿰…...
树莓派 连接 PlutoSDR 教程
在树莓派5上安装PlutoSDR(ADALM-Pluto)的驱动程序,主要需要安装相关的库和工具,以便与PlutoSDR通信,比如libiio和libad9361,并确保系统能够识别设备。由于树莓派5运行的是基于Linux的系统(通常是…...
