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

二叉树的前序、中序、后序遍历的C++实现

二叉树的前序、中序、后序 遍历属于深度优先搜索方式,本文使用递归法实现前序、中序、后序的遍历方法,代码如下:

#include <iostream>
#include <vector>struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int x):val(x),left(nullptr),right(nullptr){};
};//前序遍历
void preorderTraversal(TreeNode* root,std::vector<int>& vec)
{if(root == nullptr){return;}vec.emplace_back(root->val);preorderTraversal(root->left,vec);preorderTraversal(root->right,vec);
}//中序遍历
void inorderTraversal(TreeNode* root,std::vector<int>& vec)
{if(root == nullptr){return;}preorderTraversal(root->left,vec);vec.emplace_back(root->val);preorderTraversal(root->right,vec);
}//后序遍历
void postOrderTraversal(TreeNode* root,std::vector<int>& vec)
{if(root == nullptr){return;}preorderTraversal(root->left,vec);preorderTraversal(root->right,vec);vec.emplace_back(root->val);
}void deleteTree(TreeNode* root)
{if(root == nullptr){return;}deleteTree(root->left);deleteTree(root->right);delete root;root = nullptr;
}int main()
{//创建二叉树//        1//      /   \//     2     3//    / \   / \//   4  5  6   7//  / \// 8   9//前序遍历:中左右: 1 2 4 8 9 5 3 6 7//中序遍历:左中右: 2 4 8 9 5 1 3 6 7//后序遍历:左右中: 2 4 8 9 5 3 6 7 1TreeNode* root = new TreeNode(1);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);root->left->left->left = new TreeNode(8);root->left->left->right = new TreeNode(9);std::vector<int> vec;preorderTraversal(root,vec);printf("****************\n");for(int i =  0; i < vec.size();i++){printf("%d\t",vec.at(i));}printf("\n");std::vector<int>().swap(vec);inorderTraversal(root,vec);printf("****************\n");for(int i =  0; i < vec.size();i++){printf("%d\t",vec.at(i));}printf("\n");std::vector<int>().swap(vec);postOrderTraversal(root,vec);printf("****************\n");for(int i =  0; i < vec.size();i++){printf("%d\t",vec.at(i));}printf("\n");//    delete root->left->left->left;
//    delete root->left->left->right;deleteTree(root);std::vector<int>().swap(vec);return 0;
}

程序运行结果如下:

 

附加知识:

二叉树遍历的递归实现详解(先序、中序、后序和层次遍历) - violet-evergarden - 博客园 (cnblogs.com)

C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本_后序遍历的非递归算法-CSDN博客

 深度优先搜索(DFS)和广度优先搜索(BFS)-CSDN博客

相关文章:

二叉树的前序、中序、后序遍历的C++实现

二叉树的前序、中序、后序 遍历属于深度优先搜索方式&#xff0c;本文使用递归法实现前序、中序、后序的遍历方法&#xff0c;代码如下&#xff1a; #include <iostream> #include <vector>struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int …...

golang中数组array和切片slice的区别

go语言中最常用的数据结构 数组array 和 切片 slice的区别对比&#xff1a; 定义和初始化&#xff1a; 数组&#xff1a; [size]类型 切片&#xff1a; []类型 &#xff0c; 数组变量[low:high] var arr1 [3]string{"a", "b", "c"} //…...

LSM-Tree 原理分析

深入浅出分析LSM树&#xff08;日志结构合并树&#xff09; - 知乎 写得太好了&#xff0c;留下记录。便于复习。 LSM树详解 - 知乎 多了点点内容&#xff0c;也看看吧。...

【代码随想录37期】Day01 二分查找 + 移除元素

二分查找 力扣704 贴一下之前的笔记&#xff1a; 没想到一下子写不出来&#xff0c;忘记什么是二分法了&#xff0c;这里回顾一下&#xff1a; 「二分查找 binary search」是一种基于分治策略的高效搜索算法。 它利用数据的有序性&#xff0c;每轮减少一半搜索范围&#xff…...

GitPython 使用教程

GitPython 使用教程 GitPython 是一个用于与 Git 版本控制系统进行交互的 Python 库。它提供了简单的接口&#xff0c;让你可以通过 Python 代码执行 Git 命令和操作 Git 仓库。 1. 安装 GitPython 你可以使用 pip 在命令行中安装 GitPython&#xff1a; pip install gitpy…...

MATLAB 基于规则格网的点云抽稀方法(自定义实现)(65)

MATLAB 基于规则格网的点云抽稀方法(自定义实现)(65) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 海量点云的处理,需要提前进行抽稀预处理,相比MATLAB预先给出的抽稀方法,这里提供一种基于规则格网的自定义抽稀方法,步骤清晰,便于理解抽稀内涵, 主要涉及到使…...

论文阅读】 ICCV-2021-3D Local Convolutional Neural Networks for Gait Recognition

motivation :现有方法方法无法准确定位身体部位&#xff0c;不同的身体部位可以出现在同一个条纹(如手臂和躯干)&#xff0c;一个部分可以出现在不同帧(如手)的不同条纹上。其次&#xff0c;不同的身体部位具有不同的尺度&#xff0c;即使是不同帧中的同一部分也可以出现在不同…...

同一局域网如何从Windows系统拷贝文件到银河麒麟系统

1. 先将Windows下的、被拷贝文件所在文件夹设置为共享目录&#xff1a;在文件夹上单击右键选择“属性”菜单&#xff0c;弹出如下对话框&#xff1a; 按数字顺序单击鼠标左键&#xff0c;弹出如下对话框&#xff1a; 并将权限开放为Everyone&#xff0c;单击“共享”按钮。 在…...

2024年华为OD机试真题-数的分解-(C++)-OD统一考试(C卷D卷)

题目描述: 给定一个正整数n,如果能够分解为m(m > 1)个连续正整数之和,请输出所有分解中,m最小的分解。 如果给定整数无法分解为连续正整数,则输出字符串"N"。 输入描述: 输入数据为一整数,范围为(1, 2^30] 输出描述: 比如输入为: 21 输出: 21=10+11 补…...

vue-img-cutter 图片裁剪详解

前言&#xff1a;vue-img-cutter 文档&#xff0c;本文档主要讲解插件在 vue3 中使用。 一&#xff1a;安装依赖 npm install vue-img-cutter # or yarn add vue-img-cutter # or pnpm add vue-img-cutter 二&#xff1a;构建 components/ImgCutter.vue 组件 <script se…...

PCL 点云中的平面点云提取

平面点云提取 一. 索引提取1.1 算法概念1.2 算法流程1.3 主要函数二.代码示例三.结果示例一. 索引提取 1.1 算法概念 平面点云提取:是指从点云数据中提取出属于平面的点的过程。 1.2 算法流程 使用pcl::SACSegmentation类进行点云分割的基本步骤如下: 创建一个pcl::SACSegm…...

4.用python爬取保存在text中的格式为m3u8的视频

文章目录 一、爬取过程详解1.寻找视频的m3u8链接2.从网页源码中寻找视频的m3u8链接的第二部分内容3.从视频的m3u8链接获取视频 二、完整的代码 一、爬取过程详解 1.寻找视频的m3u8链接 这个文档承接了爬虫专栏的 第一节.python爬虫爬取视频网站的视频可下载的源url&#xff0…...

240503-关于Unity的二三事

240503-关于Unity的二三事 1 常用快捷键 快捷键描述CtrlP播放/停止Ctrl1打开Scene窗口Ctrl2打开Game窗口Ctrl3打开Inspect窗口Ctrl4打开Hierarchy窗口Ctrl5打开Project窗口Ctrl6打开Animation窗口 2 关联VisualStudio2022 3 节约时间&#xff1a;将最新声明的参数移动到最上…...

顺序栈的操作

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd;既然选择了远方&#xff0c;当不负青春…...

STM32 各外设GPIO配置

高级定时器TIM1/TIM8 通用定时器TIM2/3/4/5 USART SPI I2S I2C接口 BxCAN SDIO ADC/DAC 其它I/O功能...

React-hooks相关知识点总结

前言 随着函数式组件的不断流行&#xff0c;React从类式组件走上了函数式组件的时代&#xff0c;那么在新的React函数式编程中&#xff0c;hooks也成为了这个时期最广泛使用的一种方式。现在让我们总结下react hooks吧。 Hooks 是什么 react-hooks是react16.8以后&#xff0c…...

20240508日记

今天工作内容&#xff1a; 1.二号机S3点位焊接测试&#xff0c;调整位置精度。 2.一号机送针位置调整 3.自定义焊接功能测试 4.EAP服务启动测试 明日计划&#xff1a; 1.EAP流程修改功能开发 1.1 Read Barcode Complete 事件&#xff0c;上传料盘码和设备ID&#xff0c;等EA…...

Web实操(6),基础知识学习(24~)

1.[ZJCTF 2019]NiZhuanSiWei1 &#xff08;1&#xff09;进入环境后看到一篇php代码&#xff0c;开始我简单的以为是一题常规的php伪协议&#xff0c;多次试错后发现它并没有那么简单&#xff0c;它包含了基础的文件包含&#xff0c;伪协议还有反序列化 &#xff08;2&#x…...

JavaSE——方法详解

1. 方法的概念 方法就是一个代码片段 . 类似于 C 语言中的 " 函数 " 。 方法存在的意义 : 1. 是能够模块化的组织代码(当代码规模比较复杂的时候). 2. 做到代码被重复使用, 一份代码可以在多个位置使用. 3. 让代码更好理解更简单. 4. 直接调用现有方法开发, 不…...

iBarcoder for Mac:一站式条形码生成软件

在数字化时代&#xff0c;条形码的应用越来越广泛。iBarcoder for Mac作为一款专业的条形码生成软件&#xff0c;为用户提供了一站式的解决方案。无论是零售、出版还是物流等行业&#xff0c;iBarcoder都能轻松应对&#xff0c;助力用户实现高效管理。 iBarcoder for Mac v3.14…...

Wnt/β-catenin信号通路在组织修复与再生中的关键作用

1. Wnt/β-catenin信号通路&#xff1a;细胞修复的"总指挥" 想象一下你手指被划伤后伤口愈合的过程&#xff0c;或者肝脏在受损后自我修复的神奇能力。这些看似平常的现象背后&#xff0c;其实隐藏着一个精密的分子调控网络——Wnt/β-catenin信号通路。这条通路就像…...

J-Link驱动签名被拦?手把手教你用WHQL签名驱动搞定Windows 11安全策略

J-Link驱动签名被拦&#xff1f;手把手教你用WHQL签名驱动搞定Windows 11安全策略 最近在帮团队调试一批新的STM32H7开发板时&#xff0c;遇到了一个令人头疼的问题&#xff1a;明明上周还能正常使用的J-Link调试器&#xff0c;在新的Windows 11企业版电脑上突然无法识别了。设…...

VisionPro实战:CogGraphicCollection在工业检测中的5个高效用法(附代码)

VisionPro实战&#xff1a;CogGraphicCollection在工业检测中的5个高效用法&#xff08;附代码&#xff09; 在工业自动化领域&#xff0c;机器视觉系统正变得越来越智能和高效。作为康耐视VisionPro平台的核心组件之一&#xff0c;CogGraphicCollection为工程师提供了强大的图…...

ESP32烧录全攻略:从命令行到GUI工具,新手也能轻松搞定

ESP32烧录全攻略&#xff1a;从命令行到GUI工具&#xff0c;新手也能轻松搞定 第一次接触ESP32开发板时&#xff0c;那块小小的芯片里蕴藏着无限可能&#xff0c;但如何将自己的代码"装进"这个硬件大脑却成了拦路虎。记得我最初尝试烧录时&#xff0c;面对各种专业术…...

三三复制系统模式介绍

三三复制系统模式介绍&#xff1a;从底层逻辑到合规落地在社交电商与团队裂变领域&#xff0c;三三复制系统凭借其低门槛、高稳定性的特点&#xff0c;成为企业实现用户快速增长与业绩倍增的重要工具。不同于传统多级分销的复杂层级&#xff0c;三三复制系统以“三”为核心基数…...

nRF51822 RTC1深度睡眠唤醒与80μA低功耗优化

1. nRF51822低功耗唤醒系统深度解析&#xff1a;RTC1驱动的深度睡眠唤醒机制与80μA电流优化实践1.1 项目背景与工程痛点定位nRF51_WakeUp项目聚焦于nRF51822 SoC在超低功耗场景下的精准唤醒能力构建&#xff0c;其核心目标是通过RTC1&#xff08;Real-Time Counter 1&#xff…...

G-Helper高效解决ROG游戏本散热与性能平衡难题

G-Helper高效解决ROG游戏本散热与性能平衡难题 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: https://gitcode…...

从‘水变油’到‘大师一问三不知’:求实学风如何塑造科学巨匠与避免历史弯路

1. 科学史上的两副面孔&#xff1a;浮夸与求实 1993年&#xff0c;一场名为"水变油"的闹剧在国内掀起轩然大波。某"发明家"声称发明了能将水转化为燃料的"神奇添加剂"&#xff0c;甚至获得了部分政府部门的支持。这个明显违背能量守恒定律的&quo…...

MoMask终极指南:5分钟学会AI生成3D人体运动动画

MoMask终极指南&#xff1a;5分钟学会AI生成3D人体运动动画 【免费下载链接】momask-codes Official implementation of "MoMask: Generative Masked Modeling of 3D Human Motions (CVPR2024)" 项目地址: https://gitcode.com/gh_mirrors/mo/momask-codes 想…...

Llama-3.2-3B效果体验:Ollama简单操作,产出专业级文案

Llama-3.2-3B效果体验&#xff1a;Ollama简单操作&#xff0c;产出专业级文案 1. 模型概览&#xff1a;小而精的文本生成专家 Llama-3.2-3B是Meta最新推出的轻量级语言模型&#xff0c;在3B参数规模下实现了接近大模型的文本生成质量。经过指令微调优化后&#xff0c;它在多语…...