二叉树的前序、中序、后序遍历的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 1
    TreeNode* 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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/604764.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows基于WSL2安装Kali-linux

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、kali-linux是什么&#xff1f;二、简单使用1.下载2.打开1.通过应用列表2.通过Terminal 三、安装图形界面1.下载2.打开 四、重头戏总结 前言 kali-linux大家…

NERF++:Analyzing and Improving Neural Radiance Fields神经辐射场的分析与改进

ABSTRACT 神经辐射场(NeRF)可以实现各种捕获设置的令人印象深刻的视图合成结果&#xff0c;包括360度捕获有界场景和前向捕获有界和无界场景。NeRF 将代表视图不变不透明度和视图相关颜色体积的多层感知器(MLPs)匹配到一组训练图像中&#xff0c;并基于立体渲染技术对新视图进…

力扣刷题--数组--第三天

今天再做两道二分查找的题目&#xff0c;关于二分查找的知识可看我前两篇博客。话不多说&#xff0c;直接开干&#xff01; 题目1&#xff1a;69.x 的平方根 题目详情&#xff1a;   给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。由于返回类型是整数&#…

从零开始的软件测试学习之旅(九)jmeter直连数据库及jmeter断言,关联

jmeter直连数据库及断言,关联 jmeter直连数据库步骤jmeter断言jmeter逻辑控制器if控制器ForEach控制器循环控制器 Jmeter关联Jmeter关联XPath提取器Jmeter关联正则表达式提取器二者比较跨线程组关联 每日复习 jmeter直连数据库 概念 这不叫直连:Jmeter -> java/python 提供的…

单片机-点亮第一盏灯

原理图 需求&#xff1a;点亮或是熄灭LED 通过控制 P5.3引脚输出高电平时&#xff0c;LED灯就点亮&#xff0c;输出低电平时LED灯就熄灭 1.项目创建 新建项目 配置开发板信息 当前位STC芯片的开发板&#xff0c;选择STC MCU Database 搜素具体芯片型号&#xff0c;进行配置…

Spring-依赖注入的处理过程

前置知识 1 入口 DefaultListableBeanFactory#resolveDependency 2 每个依赖都有对应的DependencyDescriptor 3 自定绑定候选对象处理器AutowireCapableBeanFactory 注入处理 我们可以看到AutowireCapableBeanFactory中有两个方法&#xff1a; 第一个是单个注入&#xff1a;…

52页 | 2024大型语言模型行业图谱研究报告(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 【2024大型语言模型行业图谱研究报告】 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT解…

【软考高项】三十六、资源管理6个过程

一、规划资源管理 1、定义、作用 定义&#xff1a;定义如何估算、获取、管理和利用团队以及实物资源的过程作用&#xff1a;根据项目类型和复杂程度确定适用于项目资源的管理方法和管理程度 2、输入 项目管理计划 质量管理计划、范围基准项目章程 项目文件 需求文件…

PostgreSQL和openGauss优化器对一个关联查询的SQL优化改写

PostgreSQL和openGauss数据库优化器在merge join关联查询的SQL优化改写 PostgreSQL 查询计划openGauss 查询计划拓展对比 看腻了文章就来听听视频讲解吧&#xff1a;https://www.bilibili.com/video/BV1oH4y137P7/ 数据库类型数据库版本PostgreSQL16.2openGauss6.0 创建测试表…

教你如何用VUE实现一个无缝横向滚动抽奖的效果

最近一位安卓端同事想要实现一个效果如下图&#xff0c;我们先看如下图&#xff1a; 我们看到上面想到如何实现呢&#xff1f; 先说下我的思路&#xff1a; 我先想到的是看能不能用轮播图swiper插件实现&#xff0c;试了下发现自己行不通&#xff0c;原因不是在于插件问题&am…

How Linux Works I - How Linux Start Up

目录 Linux如何启动&#xff1f; 启动信息 内核启动初始化与启动选项 写在前面&#xff1a;上一个专栏中我写完了内核源码层面看Linux&#xff0c;我们把抽象层拉高一点&#xff0c;看看Linux是如何工作的&#xff01; Linux如何启动&#xff1f; BIOS&#xff08;Basic Inpu…

05-08 周三 FastBuild FastAPI 引入并发支持和全局捕获异常

时间版本修改人描述2024年5月8日20:41:03V0.1宋全恒新建文档 简介 由于FastBuild之前花费了大概5天的时间优化&#xff0c;但最近重新部署&#xff0c;又发现了一些问题&#xff0c;就很痛苦&#xff0c;五一之后&#xff0c;自己又花了三天的时间系统的进行了优化。 上一波优…

刷题训练之模拟

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握模拟算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题训…

华为车BU迈入新阶段,新任CEO对智能车的3个预判

作者 |张马也 编辑 |德新 4月24日&#xff0c;北京车展前夕&#xff0c;华为召开了新一年的智能汽车解决方案新品发布会。 这次发布会&#xff0c;也是华为智能汽车解决方案BU&#xff08;简称「车BU」&#xff09;CEO 靳玉志的公开首秀。 一开场&#xff0c;靳玉志即抛出了…

损失一件外套?

2024/05/07&#xff0c;晴 碎碎念一波&#xff01; 早上洗漱完要出门时&#xff0c;发现自己昨天穿的外套不见了&#xff01;&#xff01;&#xff01;外套上身效果很不错&#xff0c;买了1年多穿的频率非常高&#xff0c;现在丢了还真挺可惜。 衣服口袋有一个耳机&#xff0…

信创基础软件之数据库

一、数据库概述 数据库是一种用于存储和管理拥有固定格式和结构数据的仓库型数据管理系统。其主要用于业务数据的存储和业务逻辑运算&#xff0c;具体负责保障数据的安全性、完整性、多用户对数据的并发使用以及发生故障后的系统恢复。 二、数据库的体系架构 数据库内核:对数…

Java中next()与nextLine()的区别[不废话,直接讲例子]

在使用牛客进行刷题时&#xff0c;我们很多时候会遇到这样的情况&#xff1a; 区别很简单&#xff0c;如果你要输入用空格或者回车分开的数据如&#xff1a; abc_def_ghi 这三组数据&#xff08; _ 是空格&#xff09; 用hasNext: 执行结果&#xff1a; 如果只用换行符号进行…

返回链表的中间节点题目讲解(超快方法)

一&#xff1a;题目 二&#xff1a;思路讲解 采用快慢指针方法来解决 1&#xff1a;slow指针一次跳一个节点&#xff0c;fast指针一次跳两个节点&#xff0c;这样当fast到尾节点的时候&#xff0c;slow刚好到中间节点&#xff0c;但是奇数个的时候&#xff0c;fast不会刚好的…

Java | Leetcode Java题解之第59题螺旋矩阵II

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] generateMatrix(int n) {int num 1;int[][] matrix new int[n][n];int left 0, right n - 1, top 0, bottom n - 1;while (left < right && top < bottom) {for (int column left; co…

DenseCLIP环境配置

直接看raoyongming/DenseCLIP: [CVPR 2022] DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting (github.com) 但这里的环境配置可能和现在不太适配&#xff0c;自己配了好久没弄好 后面尝试了另外的版本的&#xff08;但这个版本少了一些内容&#…
最新文章