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

c++树(一)定义,遍历

目录

树的定义

树的基本术语

树的初始起点:我们定义为根

树的层次:

树的定义:

树的性质

性质1:

性质2:

树形结构存储的两种思路

树的遍历模板

树上信息统计方式1-自顶向下统计

树上信息统计方式2-自底向上统计

子树的概念:

总结:​编辑


树的定义

        树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:①有且仅有一个特定的称为根(Root)的结点;②当n>1时,其余结点可分为m(m>0)个互不相交的有限集T 1 {T}_{1}T 1 ​ 、T 2 {T}_{2}T 2 ​ 、… 、T m {T}_{m}T m ​ ,其中每一个集合本身又是一棵树,并且称为根的子树(Sub Tree)。

树的基本术语

  • 节点的度:一个节点含有的子树的个数称为该节点的度;
  • 叶节点或终端节点:度为0的节点称为叶节点;
  • 非终端节点或分支节点:度不为0的节点;
  • 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
  • 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
  • 兄弟节点:具有相同父节点的节点互称为兄弟节点;
  • 树的度:一棵树中,最大的节点的度称为树的度;
  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  • 树的高度或深度:树中节点的最大层次;
  • 堂兄弟节点:双亲在同一层的节点互为堂兄弟;
  • 节点的祖先:从根到该节点所经分支上的所有节点;
  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
  • 森林:由m(m>=0)棵互不相交的树的集合称为森林;

树的初始起点:我们定义为根


递归树中,都只能从父节点走到子节点。
我们只需要记录每个父节点有哪些子节点,那么就可以遍历整个递归树。

树的层次:


节点高度:指从这个节点到叶子节点的距离(一共经历了几个节点)
节点深度:指从当前节点到根节点的距离(一共经历了几个节点)
树的高度:指所有节点高度的最大值
树的深度:指所有节点深度的最大值
节点的层:从根节点开始,假设根节点为第1层,根节点的子节点为第2层,依此类推

树的定义:


有n(n>=0)个节点,且任意两个点有且仅有一条路径连通的图形。若n=0,此时为空树。

树的性质


性质1:

n个节点,保证任意两点有且仅有一条路径,树中有且仅有n-1条边。
证明:除第一个节点外,连接一个其他节点,至少增加一条边,所以n个点至少要用n-1条边才能保证所有节点连通。若此时再增加一条非重边,任意两点间是否还存在一条唯一路径。


性质2:

树的根结点没有前驱(父节点),除根结点外的所有结点有且只有一个前驱。树中所有结点可以有零个或多个后继(子节点)。
证明:同上。

树形结构存储的两种思路


1.用结构体把每个节点的信息进行封装。这样的优点在于节点信息非常独立,但是所占空间稍大。2.用多个数组,分别描述每个节点的对应信息。这种方式的有点在于速度稍快,写起来简单。

树的遍历模板


        通常来讲,树的边都是双向的我们在遍历的时候不希望一个点遍历多次。
方法1.用vis数组进行标记。
方法2.dfs中记录由父亲节点(来向),这样可以阻止走回去。

树上信息统计方式1-自顶向下统计


操作方法:在进入dfs之前进行信息统计。
如求链长:树上两个节点必然有且仅有一条路径,我们可以把该路径看成一条链。路径上的边权和为两点的链长。

树上信息统计方式2-自底向上统计


操作方法:在dfs回溯之时进行信息统计。
如求树的节点个数:当前树上共有多少个节点。

子树的概念:


抹除当前根节点以及所有与根节点的连边后,产生的树都是当前根节点的子树。
如当前根节点1的子树有,以2、3、4为根的子树。

总结:

相关文章:

c++树(一)定义,遍历

目录 树的定义 树的基本术语 树的初始起点:我们定义为根 树的层次: 树的定义: 树的性质 性质1: 性质2: 树形结构存储的两种思路 树的遍历模板 树上信息统计方式1-自顶向下统计 树上信息统计方式2-自底向上统…...

YOLOv5和LPRNet的车牌识别系统

车牌识别系统 YOLOv5和LPRNet的车牌识别系统结合了深度学习技术的先进车牌识别解决方案。该系统整合了YOLOv5目标检测框架和LPRNet文本识别模型 1. YOLOv5目标检测框架 YOLO是一种先进的目标检测算法,以其实时性能和高精度闻名。YOLOv5是在前几代基础上进行优化的…...

内容安全(深度行为检测技术、IPS、AV、入侵检测方法)

1、深度行为检测技术 深度行为检测技术:是一种基于深度学习和机器学习的技术,它通过分析用户在网络中的行为模式,识别异常或潜在威胁行为,从而保护网络安全和内容安全 分类: 深度包检测技术(Deep Packet…...

MySQL双主双从实现方式

双主双从(MM-SS) 前言 避免单一主服务器宕机,集群写入能力缺失 从 1 复制 主1 ,从 2 复制 主 2 主 1 复制 主 2,主 2 复制主 1 也就是 主 1 和主 2 互为主从。主1主2互为主从, 是为了以下情景&#xff0c…...

pico+unity手柄和摄像机控制初级设置

1、摄像头配置 摄像头模式、floor是追踪原点类型(将根据设备检测到地面的高度来计算追踪原点), Device 模式时,为通常理解的 Eye 模式,不会将根据设备检测到地面的高度来计算追踪原点 选择floor时,修改相…...

vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table

文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…...

TS相较于JS有什么优缺点

TypeScript&#xff08;TS&#xff09;是JavaScript的一个超集&#xff0c;它添加了静态类型检查和编译时的强大功能&#xff0c;目的是提高代码质量和维护性。相较于JavaScript&#xff0c;TS的主要优点和缺点如下&#xff1a; 优点&#xff1a; 类型安全性&#xff1a;通过…...

【Harmony】SCU暑期实训鸿蒙开发学习日记Day2

目录 Git 参考文章 常用操作 ArkTS的网络编程 Http编程 发送请求 GET POST 处理响应 JSON数据解析 处理响应头 错误处理 Web组件 用生命周期钩子实现登录验证功能 思路 代码示例 解读 纯记录学习日记&#xff0c;杂乱&#xff0c;误点的师傅可以掉了&#x1…...

vue3前端开发-执行npm run dev提示报错怎么解决

vue3前端开发-执行npm run dev提示报错怎么解决&#xff01;今天在本地安装初始化了一个vue3的案例demo。但是当我执行npm run dev想启动它时报错了说&#xff0c;找不到dev。让我检查package.json文件是否包含dev。如下图所示&#xff1a; 实际上&#xff0c;不必惊慌&#xf…...

https 单向认证和双向认证

单向认证 单向认证是客户端(通常是浏览器)验证服务器的身份。服务器向客户端提供数字证书,客户端通过验证该证书的真实性来确认与服务器的连接是安全的。 服务器提供证书:服务器向客户端提供一个数字证书,用于验证服务器的身份。客户端验证服务器:客户端验证服务器的证书…...

Python中Selenium 和 keyboard 库的使用

文章目录 一、Selenium基本使用2.等待元素加载常用操作 keyboard基本使用与 Selenium 联合使用 一、Selenium Selenium 是一个用于浏览器自动化的工具。它可以模拟用户与网页的交互&#xff0c;如点击按钮、填写表单、导航页面等。Selenium 支持多种编程语言&#xff0c;包括 …...

网络安全协议系列

目录 一、安全协议的引入 1.TCP/IP协议族中普通协议的安全缺陷 1.信息泄露 2.信息篡改 3.身份伪装 4.行为否认 2.网络安全需求 二、网络安全协议的定义 三、构建网络安全协议所需的组件 1.加密与解密 2.消息摘要 3.消息验证码 4.数字签名 5.密钥管理 1.建立共享…...

.net core appsettings.json 配置 http 无法访问

1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是网页无法打开 3、解决办法&#xff0c;在Program.cs增加下列语句 app.UseAntiforgery();...

opencv—常用函数学习_“干货“_11

目录 二九、图像累加 将输入图像累加到累加图像中 (accumulate) 将输入图像加权累加到累加图像中 (accumulateWeighted) 将输入图像的平方累加到累加图像中 (accumulateSquare) 将两个输入图像的乘积累加到累加图像中 (accumulateProduct) 解释 三十、随机数与添加噪声 …...

WSL-Ubuntu20.04部署环境配置

1.更换Ubuntu软件仓库镜像源 为了在WSL上使用TensorRT进行推理加速&#xff0c;需要安装以下环境&#xff0c;下面将按以下顺序分别介绍安装、验证以及删除环境&#xff1a; #1.C环境配置 gcc、gdb、g #2.gpu环境 cuda、cudnn #3.Cmake环境 CMake #4.OpenCV环境 OpenCV #5.Ten…...

6Python的Pandas:数据读取与输出

Pandas是一个强大的Python数据分析库&#xff0c;提供了读取和输出数据的多种功能。以下是一些常见的数据读取与输出方法&#xff1a; 1. 读取CSV 读取数据 从CSV文件读取数据 import pandas as pd# 读取CSV文件 df pd.read_csv(file_path.csv) print(df.head())从Excel文…...

ubuntu 网络 通讯学习笔记2

1.ubuntu 网络常用命令 在Ubuntu中&#xff0c;有许多网络相关的常用命令。以下是一些主要命令及其用途&#xff1a; ifconfig&#xff1a;此命令用于显示和配置网络接口信息。你可以使用它来查看IP地址、子网掩码、广播地址等。 例如&#xff1a;ifconfig 注意&#xff1a…...

深入理解JS中的事件委托

JavaScript中的事件委托是一种非常有用的事件处理模式,它允许我们利用事件模型的事件冒泡阶段来减少事件处理器的数量,提高网页性能。本文将介绍事件委托的概念、工作原理、优点以及如何在实际项目中应用事件委托。 1、事件模型 事件模型指在Web开发中,处理和管理事件(如…...

Camera Raw:首选项

Camera Raw 首选项 Preferences提供了丰富的配置选项&#xff0c;通过合理设置&#xff0c;可以显著提升图像处理的效率和效果。根据个人需求调整这些选项&#xff0c;有助于创建理想的工作环境和输出质量。 ◆ ◆ ◆ 打开 Camera Raw 首选项 方法一&#xff1a;在 Adobe Bri…...

HLS加密技术:保障流媒体内容安全的利器

随着网络视频内容的爆炸性增长&#xff0c;如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS&#xff08;HTTP Live Streaming&#xff09;加密技术作为一种先进的流媒体加密手段&#xff0c;凭借其高效性和安全性&#xff0c;在直播、点播等场景中得到了广泛应…...

Nitric常见问题解答:开发者最关心的25个问题汇总

Nitric常见问题解答&#xff1a;开发者最关心的25个问题汇总 【免费下载链接】nitric Nitric is a multi-language framework for cloud applications with infrastructure from code. 项目地址: https://gitcode.com/gh_mirrors/ni/nitric Nitric是一个多语言框架&…...

Shiv进阶教程:解决Python依赖管理的7个实用技巧

Shiv进阶教程&#xff1a;解决Python依赖管理的7个实用技巧 【免费下载链接】shiv shiv is a command line utility for building fully self contained Python zipapps as outlined in PEP 441, but with all their dependencies included. 项目地址: https://gitcode.com/g…...

惠普OMEN游戏本性能优化终极指南:如何用开源工具彻底释放硬件潜力

惠普OMEN游戏本性能优化终极指南&#xff1a;如何用开源工具彻底释放硬件潜力 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为惠普OMEN游戏本官方软…...

FinRL_Podracer:基于深度强化学习的高性能量化交易框架解析

1. 项目概述&#xff1a;当强化学习遇上量化交易最近几年&#xff0c;量化交易圈子里有个词儿越来越热&#xff0c;那就是“强化学习”。你可能听说过AlphaGo下围棋&#xff0c;或者AI在星际争霸里打败人类高手&#xff0c;这些背后都是强化学习在发力。简单来说&#xff0c;它…...

开源状态监控工具openclaw-status:从原理到部署的完整实践指南

1. 项目概述&#xff1a;一个开源状态监控工具的诞生最近在折腾一个开源项目&#xff0c;叫openclaw-status&#xff0c;是vibe-with-me-tools组织下的一个子项目。简单来说&#xff0c;这是一个用于监控和展示各种服务、应用、设备状态的工具。听起来是不是有点像那些商业化的…...

ARM AMU与PMU架构详解及性能监控实践

1. ARM AMU与PMU架构概述在现代ARM处理器架构中&#xff0c;活动监控单元(AMU)和性能监控单元(PMU)是系统级性能分析的核心组件。作为芯片设计工程师&#xff0c;我经常需要与这些硬件监控模块打交道。AMU主要负责处理器内部活动的监控和统计&#xff0c;而PMU则提供更通用的性…...

数据库完整性约束与安全机制全解析

一、数据库完整性约束1、数据库完整性基本概念与核心机制&#xff08;1&#xff09;完整性定义与作用数据库完整性&#xff08;Database Integrity&#xff09;是指在任何情况下保证数据的正确性&#xff08;Validity&#xff09;和一致性&#xff08;Consistency&#xff09;&…...

【ElevenLabs API接入黄金手册】:20年AI语音工程师亲授5大避坑要点与3小时极速上线实战路径

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs API接入黄金手册&#xff1a;开篇导论与核心价值定位 ElevenLabs 以行业领先的语音自然度、情感表现力与多语言支持能力&#xff0c;成为生成式AI语音服务的事实标准。其API并非仅提供TTS基…...

终极UE4SS游戏Mod开发指南:从零开始掌握虚幻引擎脚本系统

终极UE4SS游戏Mod开发指南&#xff1a;从零开始掌握虚幻引擎脚本系统 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4S…...

2025届必备的六大AI辅助论文网站推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek系列模型相关的论文&#xff0c;全方位细致地阐述了其技术架构以及训练的方式方法。…...