C ++ 从单链表到创建二叉树到二叉树的遍历(结构体)
首先我们要了解二叉树的数据结构是什么,本质上二叉树是一个有两个节点的链表,我们先了解的单链表的相关定义
单链表

创建一个朴素的单链表
#include <iostream>using namespace std;struct Node{int val;Node* next;Node(int x) : val(x), next(nullptr) {}
};int main()
{return 0;
}
Node(int value) : data(value), next(nullptr) {}
-
构造函数定义:
Node(int value)是构造函数的声明,它接受一个int类型的参数value。 -
成员初始化列表:
: data(value), next(nullptr)是成员初始化列表,用于初始化类成员。data(value)将构造函数的参数value赋给data成员变量。next(nullptr)将next指针初始化为nullptr,表示该节点最初不指向任何其他节点。
-
空体:
{}表示构造函数的主体,这里是空的,因为所有初始化工作都在成员初始化列表中完成了。
简而言之,这个构造函数创建一个 Node 对象时,设置 data 为提供的 value 值,而 next 则默认指向空,表示没有下一个节点。
创建一颗二叉树
比如我想要创建一颗这样的二叉树

在结构体当中定义两个结点,并且初始化这棵树
#include <iostream>using namespace std;struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};// 初始化
void init(TreeNode* root){root -> left = new TreeNode(2);root -> right = new TreeNode(3);root -> left -> left = new TreeNode(4);root -> left -> right = new TreeNode(5);root -> right -> left = new TreeNode(6);root -> right -> right = new TreeNode(7);
}int main()
{// 初始化根节点是1TreeNode* root = new TreeNode(1); init(root);return 0;
}
前序遍历、中序遍历、后序遍历
这里是利用了递归的思想,详细请看洛谷B3642 二叉树的遍历(前序、中序、后序)-CSDN博客
前序的代码如下,中序、后序就不展示了
#include <iostream>using namespace std;struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};// 初始化
void init(TreeNode* root){root -> left = new TreeNode(2);root -> right = new TreeNode(3);root -> left -> left = new TreeNode(4);root -> left -> right = new TreeNode(5);root -> right -> left = new TreeNode(6);root -> right -> right = new TreeNode(7);
}void dfs(TreeNode* root){if(root == nullptr) return;cout << root -> val << " ";dfs(root -> left);dfs(root -> right);
}int main()
{// 初始化根节点是1TreeNode* root = new TreeNode(1); init(root);dfs(root);return 0;
}
层次遍历
这里讲一下层次遍历以上面那棵树为例
首先要对队列很熟悉,层次遍历是每一层从左往右依此遍历,那么这棵树的层次遍历就是1234567
那就很明确了,从第一层开始,从左往右加入队列即可
#include <iostream>
#include <queue>using namespace std;struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};// 初始化
void init(TreeNode* root){root -> left = new TreeNode(2);root -> right = new TreeNode(3);root -> left -> left = new TreeNode(4);root -> left -> right = new TreeNode(5);root -> right -> left = new TreeNode(6);root -> right -> right = new TreeNode(7);
}void bfs(TreeNode* root){queue<TreeNode*> q;q.push(root);while(!q.empty()){TreeNode* node = q.front();q.pop();cout << node -> val << " ";if(node -> left != nullptr) q.push(node -> left);if(node -> right != nullptr) q.push(node -> right);}
}int main()
{// 初始化根节点是1TreeNode* root = new TreeNode(1); init(root);bfs(root);return 0;
}
加油
相关文章:
C ++ 从单链表到创建二叉树到二叉树的遍历(结构体)
首先我们要了解二叉树的数据结构是什么,本质上二叉树是一个有两个节点的链表,我们先了解的单链表的相关定义 单链表 创建一个朴素的单链表 #include <iostream>using namespace std;struct Node{int val;Node* next;Node(int x) : val(x), next(…...
Python 编程:如何巧妙运用 `abc` 模块解锁面向对象设计的新维度?
引言 在软件开发的世界里,面向对象编程(OOP)作为一门艺术,其精髓在于通过封装、继承与多态来构建可维护性高、易于扩展的系统。而在 Python 这门语言中,abc 模块则为我们提供了一种优雅的方式来定义抽象基类ÿ…...
Jenkins 执行 shell 时报错 Host key verification failed.
1. 问题描述 在 jenkins 中执行下面的 shell 语句时 sshpass -p "123456" scp -r * dep192.168.1.100:/home/dep/Desktop/报错 Host key verification failed.可能原因是由于首次登录时需要输入 yes 导致无法连接成功。 The authenticity of host 192.168.1.100…...
MyBatis-Plus&Druid数据源
MyBatis-Plus(简称MP)和Druid数据源在Java开发中各自扮演着重要的角色,它们分别增强了MyBatis的数据库操作能力和提供了高效的数据库连接池管理。以下是对MyBatis-Plus和Druid数据源的总结: MyBatis-Plus 定义与特性:…...
MTPA控制分析与推导
目录 MTPA (Maximum torque per ampere) 一. 控制目的 二. 设计思路 三. 推导过程 MTPA (Maximum torque per ampere) 一. 控制目的 忽略电机中的铁耗只考虑铜耗的背景下,希望实现铜耗最小化。 二. 设计思路 通过给出电机在d-q坐标系下的等效电路模型&…...
Spring Boot 的Web项目如何直接显示html
前言 实际的开发中,在Spring Boot的Web项目中直接使用html文件的场景已经比较少了, 或者是只需要很简单的页面显示,或者是演示的需要, 大部分的状况都是Spring Boot作为后端提供REST 的服务,结合其他的一些前端Framework进行开发,比如VUE,Ext JS等。 Spring Boot项目中…...
【回收站选址】
题目 代码 #include <bits/stdc.h> using namespace std; const int R 2e91; typedef long long LL; unordered_set<LL> s; int piles[5]; int dx[4] {-1, 0, 1, 0}, dy[4] {0, 1, 0, -1}; int dx1[4] {-1, -1, 1, 1}, dy1[4] {-1, 1, -1, 1};bool check(LL …...
Springboot整合websocket(附详细案例代码)
文章目录 WebSocket简述WebSocket是什么?WebSocket 的特点WebSocket 的工作流程WebSocket的消息(帧)格式WebSocket 与 HTTP springboot中整合WebSocketpom依赖实体类配置类握手配置类WebSocket配置类 自定义异常类webSocket服务类websocket中Session的 getBasicRemo…...
微信小程序:navigateTo跳转无效
关于 navigateTo 跳转无效问题,在IOS、模拟器上面都能正常跳转,但是在安卓上面不能跳转,过了一段时间IOS也不能跳转了。仔细找了下问题结果是要跳转的页面是tab,不能使用navigateTo 取跳转修改为: wx.switchTab({url:…...
C++ 设计模式——解释器模式
目录 C 设计模式——解释器模式1. 主要组成成分2. 逐步构建解释器模式步骤1: 定义抽象表达式步骤2: 实现终结符表达式步骤3: 实现非终结符表达式步骤4: 构建语法树步骤5: 实现内存管理步骤6: 创建上下文和客户端 3. 解释器模式 UML 图UML 图解析 4. 解释器模式的优点5. 解释器模…...
【开源大模型生态6】生态大咖与产品布局
上图是基础设施、大模型、行业应用构成大模型开源生态体系。 这里一一给大家介绍以下。 金融 Qwen:阿里云推出的一种大型语言模型,具有强大的对话能力和多模态理解能力。天工:通常指的是阿里云的一套物联网(IoT)解决…...
虚拟机苹果系统的QT安装体验
前言 苹果系统MacOS中除了安装XCode,完全可以安装QT。本质上来讲,苹果系统就是Linux改装版本,实际上和Ubuntu非常的接近。 1、Mac对应的QT安装包的下载 安装参考链接:MacOS下Qt 5开发环境安装与配置_macos qt-CSDN博客 苹果系统…...
多路转接之poll(接口介绍,struct pollfd介绍,实现原理,实现非阻塞网络通信代码)
目录 poll 引入 介绍 函数原型 fds struct pollfd 特点 nfds timeout 取值 返回值 原理 如何实现关注多个fd? 如何确定哪个fd上有事件就绪? 如何区分事件类型? 判断某事件是否就绪的方法 代码 示例 总结 为什么说它解决了fd上限问题? 缺点 poll 引入…...
两个月冲刺软考——位示图题型的例题讲解与分析;索引文件的详细解读
1. 位示图 位示图(Bitmap)是一种数据结构,用于表示和存储图像信息。在计算机科学中,位示图通常指的是一个二维的数组,每个元素称为一个像素,每个像素可以存储一个颜色值。 可以将位示图类比为电影院选座操作…...
SprinBoot+Vue校园数字化图书馆系统的设计与实现
目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…...
python如何加速计算密集型任务?
问题描述: 在python中,有一个函数,其功能是进行某种计算,需要传入一些参数,计算完成后传回结果,调用其一次大概要1s的时间,现在需要通过for循环调用其350次,保存每次调用结果&#…...
握手的方式展现人的性格及行为倾向
握手是人际交往中最常见的礼节之一,同时通过和对方握手,可以感知他的内心,进一步得知对方的性格及行为倾向。 心理学家认为,最好的握手方式是力度适中,动作沉稳,自然注视对方的眼睛,这种握手方…...
Java 排序算法详解
排序是计算机科学中的基本操作,Java 提供了多种排序算法来满足不同的需求。常见的排序算法包括冒泡排序、选择排序、插入排序、归并排序、快速排序和堆排序。本文将逐一介绍这些排序算法及其 Java 实现。 1. 冒泡排序 (Bubble Sort) 冒泡排序是一种简单的排序算法…...
vue3实现拖拽移动位置,拖拽过程中鼠标松开后元素还吸附在鼠标上并随着鼠标移动
发现问题 拖拽元素移动的时候,偶尔会出现拖拽过程中鼠标松开后元素还吸附在鼠标上并随着鼠标移动,要再按一下元素才会被放置下来。但是有时就正常。 问题分析 出现该问题的原因是:这个过程会触发H5原生的拖拽事件,并且不会监听…...
没有屋檐的房子-011
棺材 (下) 时过境迁这个成语描述了前因后果的两种概念的变化,时间推延和环境的变迁。问题是,时间是什么呢?是环境变化表征了时间的推延,还是时间推延导致了环境的变化?人在多数时候,…...
基于qstock的北向资金量化分析框架构建与策略应用
基于qstock的北向资金量化分析框架构建与策略应用 【免费下载链接】qstock qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策略b…...
Python EXE逆向工程架构解析:多格式可执行文件源码提取技术实现
Python EXE逆向工程架构解析:多格式可执行文件源码提取技术实现 【免费下载链接】python-exe-unpacker A helper script for unpacking and decompiling EXEs compiled from python code. 项目地址: https://gitcode.com/gh_mirrors/py/python-exe-unpacker …...
差点把用户数据泄漏给Claude Code后,我写了个 Rust 工具
两周前,我把公司的数据库接进了Claude Code,效率确实起飞了,直到我翻了一下会话记录。 两周前 公司的 PostgreSQL 数据库接进了Claude Code以后,AI 确实能干——帮我写迁移、联表、生成报表,效率直接起飞。 直到我随…...
告别手动下载烦恼!DouK-Downloader让抖音/TikTok数据采集变得简单
告别手动下载烦恼!DouK-Downloader让抖音/TikTok数据采集变得简单 【免费下载链接】TikTokDownloader TikTok 发布/喜欢/合辑/直播/视频/图集/音乐;抖音发布/喜欢/收藏/收藏夹/视频/图集/实况/直播/音乐/合集/评论/账号/搜索/热榜数据采集工具/下载工具 …...
百度网盘Mac版终极加速教程:三步告别限速,免费享受SVIP极速下载
百度网盘Mac版终极加速教程:三步告别限速,免费享受SVIP极速下载 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否曾经面对…...
Seraphine:基于LCU API的英雄联盟智能助手技术解析
Seraphine:基于LCU API的英雄联盟智能助手技术解析 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine Seraphine是一款基于英雄联盟官方LCU API开发的智能游戏辅助工具,专为英雄联盟玩家提…...
第38天:SQL详解之DML
Python学习100天(从入门到精通系列文章) 文章目录 Python学习100天(从入门到精通系列文章) 前言 一、基本查询与投影 1.1 查询所有列 1.2 投影与别名 二、数据筛选(WHERE 子句) 2.1 等值与比较筛选 2.2 多条件组合(AND / OR) 2.3 范围查询(BETWEEN) 2.4 CASE 表达式与…...
保姆级教程:用MATLAB R2019a搞定小波分析,从数据导入到等值线图绘制全流程
MATLAB小波分析实战:从数据清洗到可视化呈现的完整指南 小波分析作为时频域分析的利器,在信号处理、地球物理、生物医学等领域广泛应用。但对于刚接触MATLAB的研究生或数据分析师而言,如何将Excel中的原始数据一步步转化为专业的小波系数图和…...
UABEA:跨平台Unity游戏资源编辑神器,解锁游戏模组制作新境界
UABEA:跨平台Unity游戏资源编辑神器,解锁游戏模组制作新境界 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 你是否曾想修改游戏中的角色皮肤、替换背景音乐,或是深…...
【NotebookLM视频转文字实战指南】:20年AI工程师亲测的5大避坑技巧与98.7%准确率实现路径
更多请点击: https://intelliparadigm.com 第一章:NotebookLM视频转文字的核心原理与能力边界 NotebookLM 的视频转文字功能并非直接处理原始视频流,而是依赖 Google Cloud Speech-to-Text API 的增强版语音识别管道,并结合 YouT…...
