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

十天学完基础数据结构-第六天(树(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;
}

运行结果:
在这里插入图片描述

练习题:

  1. 二叉树和二叉搜索树有何不同?什么情况下你会选择使用二叉搜索树?

  2. 解释中序遍历的概念。为什么中序遍历在二叉搜索树中非常有用?

  3. 描述一种情况,其中树结构比线性数据结构(如数组或链表)更适合存储和组织数据。

  4. 请编写一个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))

树的基本概念 树是一种层次性的数据结构&#xff0c;它由节点组成&#xff0c;这些节点按照层次关系相互连接。树具有以下基本概念&#xff1a; 根节点&#xff1a;树的顶部节点&#xff0c;没有父节点。 子节点&#xff1a;树中每个节点可以有零个或多个子节点。 叶节点&am…...

RobotFramework流程控制(最新版本)

文章目录 一 分支流程1. 关键字&#xff1a;Run Keyword If2. 关键字&#xff1a;IF/ELSE3. 嵌套IF/ELSE4. 关键字&#xff1a;Set Variable If 二 循环流程1. 普通FOR循环2. 嵌套FOR循环3. 退出循环4. 其它常用循环 一 分支流程 1. 关键字&#xff1a;Run Keyword If Run Key…...

win11 好用的 快捷方式 --chatGPT

gpt: Windows 11引入了许多新的功能和改进&#xff0c;同时也包括一些实用的快捷方式和功能。以下是一些Windows 11中的常用快捷方式&#xff1a; 1. **Win D**&#xff1a;最小化或还原所有打开的窗口&#xff0c;显示桌面。 2. **Win E**&#xff1a;打开文件资源管理器…...

在大数据相关技术中,HBase是个分布的、面向列的开源数据库,是一个适合于非结构化数据存储的数据库。

HDFS&#xff0c;适合运行在通用硬件上的分布式文件系统&#xff0c;是一个高度容错性的系统&#xff0c;适合部署在廉价的机器上。Hbase&#xff0c;是一个分布式的、面向列的开源数据库&#xff0c;适合于非结构化数据存储。MapReduce&#xff0c;一种编程模型&#xff0c;方…...

910数据结构(2020年真题)

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

MyBatisPlus(八)范围查询

说明 范围查询&#xff0c;包括&#xff1a; 大于大于等于小于小于等于在范围内在范围外 大于&#xff1a;gt 代码 Testvoid gt() {LambdaQueryWrapper<User> wrapper new LambdaQueryWrapper<>();wrapper.gt(User::getAge, 20);List<User> users mapp…...

【day10.04】QT实现TCP服务器客户端搭建的代码

服务器&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);//此时&#xff0c;服务器已经成功进入…...

milvus 结合Thowee 文本转向量 ,新建表,存储,搜索,删除

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

GEO生信数据挖掘(三)芯片探针ID与基因名映射处理

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 处理一个探针对应多个基因 1.删除该行 2.保留分割符号前面的第一个基因 处理多个探针对应一个基因 详细代码案例一删除法 详细代码案例二 多个基因名时保留第一个基因名…...

力扣 -- 96. 不同的二叉搜索树

解题步骤&#xff1a; 参考代码&#xff1a; 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];} }; 你学会了吗&…...

经典算法-枚举法(百钱买百鸡问题)

题目&#xff1a; 条件&#xff1a;现有 100 元&#xff0c;一共要买公鸡、母鸡、小鸡三种鸡&#xff0c;已知公鸡 5 元一只&#xff0c;母鸡 3 元一只&#xff0c;1 元可以买三只小鸡。 要求&#xff1a;公鸡、母鸡、小鸡都要有&#xff0c;一共买 100 只鸡。有哪几种买法&am…...

Gurobi设置初始可行解

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

Zabbix配置监控文件系统可用空间小于30GB自动告警

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

进程调度算法之先来先服务(FCFS),短作业优先(SJF)以及高响应比优先(HRRN)

1.先来先服务&#xff08;FCFS&#xff09; first come first service 1.算法思想 主要从“公平”的角度考虑(类似于我们生活中排队买东西的例子) 2.算法规则 按照作业/进程到达的先后顺序进行服务。 3.用于作业/进程调度 用于作业调度时&#xff0c;考虑的是哪个作业先…...

MyBatisPlus(九)模糊查询

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

Spring 原理

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

基于微信小程序的明星应援小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…...

try catch 中的finally什么时候运行

try catch 中的finally什么时候运行 在Java、C#等编程语言中&#xff0c;try-catch-finally语句块用于处理异常。finally块的执行时机通常是在try块中的代码执行完毕之后&#xff0c;无论try块中的代码是否引发了异常。 具体执行顺序如下&#xff1a; 1、try块中的代码首先被…...

力扣 -- 322. 零钱兑换(完全背包问题)

参考代码&#xff1a; 未优化代码&#xff1a; class Solution { public:int coinChange(vector<int>& coins, int amount) {int n coins.size();const int INF 0x3f3f3f3f;//多开一行&#xff0c;多开一列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…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...