十天学完基础数据结构-第六天(树(Tree))
树的基本概念
树是一种层次性的数据结构,它由节点组成,这些节点按照层次关系相互连接。树具有以下基本概念:
-
根节点:树的顶部节点,没有父节点。
-
子节点:树中每个节点可以有零个或多个子节点。
-
叶节点:没有子节点的节点称为叶节点。
-
父节点:每个节点都可以有一个父节点,除了根节点。
-
深度:节点所在的层次称为深度。根节点的深度为0,其子节点深度为1,以此类推。
二叉树和二叉搜索树(BST)的定义
二叉树是一种特殊的树,其中每个节点最多有两个子节点:左子节点和右子节点。
**二叉搜索树(BST)**是一种二叉树,其中每个节点都遵循以下规则:
-
左子树中的所有节点的值小于当前节点的值。
-
右子树中的所有节点的值大于当前节点的值。
这种有序性使得二叉搜索树非常适合搜索和排序操作。
树的遍历方法
遍历树意味着按照一定顺序访问树中的节点。树的三种常见遍历方法如下:
-
前序遍历:首先访问根节点,然后按照左子树、右子树的顺序遍历。
-
中序遍历:首先遍历左子树,然后访问根节点,最后遍历右子树。中序遍历可以用于对BST进行排序。
-
后序遍历:首先遍历左子树,然后遍历右子树,最后访问根节点。
下面是一个简单的C++示例,创建二叉树和进行中序遍历:
#include <iostream>// 二叉树节点定义
struct TreeNode {int data; // 节点数据TreeNode* left; // 左子节点TreeNode* right; // 右子节点
};// 中序遍历函数
void inOrderTraversal(TreeNode* root) {if (root != nullptr) {inOrderTraversal(root->left);std::cout << root->data << " ";inOrderTraversal(root->right);}
}int main() {// 创建二叉树TreeNode* root = new TreeNode{1, nullptr, nullptr};root->left = new TreeNode{2, nullptr, nullptr};root->right = new TreeNode{3, nullptr, nullptr};// 中序遍历inOrderTraversal(root);return 0;
}
运行结果:
练习题:
-
二叉树和二叉搜索树有何不同?什么情况下你会选择使用二叉搜索树?
-
解释中序遍历的概念。为什么中序遍历在二叉搜索树中非常有用?
-
描述一种情况,其中树结构比线性数据结构(如数组或链表)更适合存储和组织数据。
-
请编写一个C++程序,创建一个简单的二叉树,并执行中序遍历,以输出节点的值。
二叉树和二叉搜索树有何不同?什么情况下你会选择使用二叉搜索树?
-
不同之处:主要区别在于有序性。二叉树是一种树形结构,每个节点最多有两个子节点。而二叉搜索树(BST)是一种特殊的二叉树,具有有序性。在BST中,左子树中的所有节点的值小于当前节点的值,右子树中的所有节点的值大于当前节点的值。
-
选择BST的情况:你会选择使用BST的情况包括需要高效的搜索和排序操作时。BST的有序性使得搜索操作非常快速,平均时间复杂度为O(log n),其中n是树中节点的数量。此外,BST还可以用于实现字典、数据库索引等需要快速查找和插入的应用。
解释中序遍历的概念。为什么中序遍历在二叉搜索树中非常有用?
-
中序遍历是一种树的遍历方式,其基本概念是按照左子树、根节点、右子树的顺序遍历树中的节点。在中序遍历中,首先遍历左子树中的所有节点,然后访问根节点,最后遍历右子树中的所有节点。
-
中序遍历在BST中的重要性:在BST中,中序遍历可以按照升序顺序访问树中的节点。这意味着通过中序遍历可以得到有序的节点序列。因此,中序遍历在BST中非常有用,可以用于实现对树的排序操作,也可以用于搜索操作,因为在有序序列中可以快速找到目标值。
描述一种情况,其中树结构比线性数据结构(如数组或链表)更适合存储和组织数据。
- 情况示例:组织文件系统。文件系统通常采用树形结构来组织文件和文件夹。每个文件夹可以包含文件和其他文件夹,这形成了一个树状结构,其中根节点代表顶级目录,叶节点代表文件。这种树形结构使得文件系统可以轻松实现文件的组织、搜索和访问。
注意:树结构在这种情况下更适合,因为它能够清晰地表示文件之间的层次关系和组织结构,而线性数据结构(如数组)通常不足以表示这种复杂性。
请编写一个C++程序,创建一个简单的二叉树,并执行中序遍历,以输出节点的值。
创建一个二叉树并进行中序遍历:
#include <iostream>// 二叉树节点定义
struct TreeNode {int data; // 节点数据TreeNode* left; // 左子节点TreeNode* right; // 右子节点
};// 中序遍历函数
void inOrderTraversal(TreeNode* root) {if (root != nullptr) {inOrderTraversal(root->left);std::cout << root->data << " ";inOrderTraversal(root->right);}
}int main() {// 创建二叉树TreeNode* root = new TreeNode{4, nullptr, nullptr};root->left = new TreeNode{2, nullptr, nullptr};root->right = new TreeNode{6, nullptr, nullptr};root->left->left = new TreeNode{1, nullptr, nullptr};root->left->right = new TreeNode{3, nullptr, nullptr};root->right->left = new TreeNode{5, nullptr, nullptr};root->right->right = new TreeNode{7, nullptr, nullptr};// 中序遍历inOrderTraversal(root);return 0;
}
运行结果:
这个程序创建了一个简单的二叉树,并使用中序遍历打印节点的值。
相关文章:

十天学完基础数据结构-第六天(树(Tree))
树的基本概念 树是一种层次性的数据结构,它由节点组成,这些节点按照层次关系相互连接。树具有以下基本概念: 根节点:树的顶部节点,没有父节点。 子节点:树中每个节点可以有零个或多个子节点。 叶节点&am…...

RobotFramework流程控制(最新版本)
文章目录 一 分支流程1. 关键字:Run Keyword If2. 关键字:IF/ELSE3. 嵌套IF/ELSE4. 关键字:Set Variable If 二 循环流程1. 普通FOR循环2. 嵌套FOR循环3. 退出循环4. 其它常用循环 一 分支流程 1. 关键字:Run Keyword If Run Key…...
win11 好用的 快捷方式 --chatGPT
gpt: Windows 11引入了许多新的功能和改进,同时也包括一些实用的快捷方式和功能。以下是一些Windows 11中的常用快捷方式: 1. **Win D**:最小化或还原所有打开的窗口,显示桌面。 2. **Win E**:打开文件资源管理器…...
在大数据相关技术中,HBase是个分布的、面向列的开源数据库,是一个适合于非结构化数据存储的数据库。
HDFS,适合运行在通用硬件上的分布式文件系统,是一个高度容错性的系统,适合部署在廉价的机器上。Hbase,是一个分布式的、面向列的开源数据库,适合于非结构化数据存储。MapReduce,一种编程模型,方…...

910数据结构(2020年真题)
算法设计题 问题1 现有两个单链表A和B,其中的元素递增有序,在不破坏原链表的情况下,请设计一个算法,求这两个链表的交集,并将结果存放在链表C中。 (1)描述算法的基本设计思想; (2)根据设计思想࿰…...

MyBatisPlus(八)范围查询
说明 范围查询,包括: 大于大于等于小于小于等于在范围内在范围外 大于:gt 代码 Testvoid gt() {LambdaQueryWrapper<User> wrapper new LambdaQueryWrapper<>();wrapper.gt(User::getAge, 20);List<User> users mapp…...
【day10.04】QT实现TCP服务器客户端搭建的代码
服务器: #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);//此时,服务器已经成功进入…...

milvus 结合Thowee 文本转向量 ,新建表,存储,搜索,删除
1.向量数据库科普 【上集】向量数据库技术鉴赏 【下集】向量数据库技术鉴赏 milvus连接 from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility connections.connect(host124.****, port19530)2.milvus Thowee 文本转向量 使用 …...

GEO生信数据挖掘(三)芯片探针ID与基因名映射处理
检索到目标数据集后,开始数据挖掘,本文以阿尔兹海默症数据集GSE1297为例 目录 处理一个探针对应多个基因 1.删除该行 2.保留分割符号前面的第一个基因 处理多个探针对应一个基因 详细代码案例一删除法 详细代码案例二 多个基因名时保留第一个基因名…...

力扣 -- 96. 不同的二叉搜索树
解题步骤: 参考代码: class Solution { public:int numTrees(int n) {vector<int> dp(n1);//初始化dp[0]1;//填表for(int i1;i<n;i){for(int j1;j<i;j){//状态转移方程dp[i](dp[j-1]*dp[i-j]);}}//返回值return dp[n];} }; 你学会了吗&…...
经典算法-枚举法(百钱买百鸡问题)
题目: 条件:现有 100 元,一共要买公鸡、母鸡、小鸡三种鸡,已知公鸡 5 元一只,母鸡 3 元一只,1 元可以买三只小鸡。 要求:公鸡、母鸡、小鸡都要有,一共买 100 只鸡。有哪几种买法&am…...

Gurobi设置初始可行解
目录 1. 决策变量的Start属性直接设置变量的初始值 1.1 Start:MIP变量的起始值(初值)double类型,可更改 1.2 StartNodeLimit:限制了在完善一组输入部分变量的初始解时,MIP所探索的分支定界的节点的数量 …...

Zabbix配置监控文件系统可用空间小于30GB自动告警
一、创建监控项 二、配置监控项 #输入名称–>键值点击选择 #找到磁盘容量点击 注: 1、vfs 该键值用于检测磁盘剩余空间,zabbix 内置了非常多的键值可以选着使用 2、单位B不需要修改,后期图表中单位和G拼接起来就是GB 3、更新时间 10S…...

进程调度算法之先来先服务(FCFS),短作业优先(SJF)以及高响应比优先(HRRN)
1.先来先服务(FCFS) first come first service 1.算法思想 主要从“公平”的角度考虑(类似于我们生活中排队买东西的例子) 2.算法规则 按照作业/进程到达的先后顺序进行服务。 3.用于作业/进程调度 用于作业调度时,考虑的是哪个作业先…...

MyBatisPlus(九)模糊查询
说明 模糊查询,对应SQL语句中的 like 语句,模糊匹配“要查询的内容”。 like /*** 查询用户列表, 查询条件:姓名包含 "J"*/Testvoid like() {String name "J";LambdaQueryWrapper<User> wrapper ne…...

Spring 原理
它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 1 Spring 特点 轻量级控制反转面向切面容器框架集合 2 Spring 核心组件 3 Spring 常用模块 4 Spring 主要包 5 Spring 常用注解 bean…...

基于微信小程序的明星应援小程序设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…...
try catch 中的finally什么时候运行
try catch 中的finally什么时候运行 在Java、C#等编程语言中,try-catch-finally语句块用于处理异常。finally块的执行时机通常是在try块中的代码执行完毕之后,无论try块中的代码是否引发了异常。 具体执行顺序如下: 1、try块中的代码首先被…...

力扣 -- 322. 零钱兑换(完全背包问题)
参考代码: 未优化代码: class Solution { public:int coinChange(vector<int>& coins, int amount) {int n coins.size();const int INF 0x3f3f3f3f;//多开一行,多开一列vector<vector<int>> dp(n 1, vector<i…...
[python]pip安装requiements.txt跳过错误包继续安装
在linux上可以用下面操作进行 while read requirement; do sudo pip install $requirement; done < requirement.txt 在windows上写个脚本 import sys from pip._internal import main as pip_maindef install(package):pip_main([--default-timeout1000,install,-U, pac…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...