c++实现二叉树的前序遍历

news2024/12/23 2:48:08

文章目录

  • c++代码
  • 结果

  • 首先实现一颗这样的树
    在这里插入图片描述
    在这里插入图片描述

  • 然后使用系统栈(递归)自己定义的栈分别实现二叉树的前序遍历

c++代码

#include<iostream>
#include<stack>
#include<map>

using namespace std;

map<int, char> nodeMap;


struct TreeNode
{
	int val_;
	TreeNode* left_;
	TreeNode* right_;

	TreeNode(const int val, TreeNode* left, TreeNode* right) :val_(val), left_(left), right_(right) {}
	TreeNode() :TreeNode(0, nullptr, nullptr) {}
	TreeNode(const int val) :TreeNode(val, nullptr, nullptr) {}
};

void preorderTraversal(TreeNode* root)
{
	if (root == nullptr)
	{		
		return;
	}
	cout << nodeMap[root->val_] << " ";
	preorderTraversal(root->left_);
	preorderTraversal(root->right_);
}

void preorderTraversal_customStack(TreeNode* root)
{
	stack<TreeNode*> customStack;
	customStack.push(root);
	while (customStack.empty() == false)
	{
		// 访问根节点
		TreeNode* tmpnode = customStack.top();
		customStack.pop();
		cout << nodeMap[tmpnode->val_] << " ";
		if (tmpnode->right_ != nullptr) 
		{
			// 右节点入栈
			customStack.push(tmpnode->right_);
		}
		if (tmpnode->left_ != nullptr)
		{
			// 左节点入栈
			customStack.push(tmpnode->left_);
		}
	}
	cout << endl;
}

int main()
{
	nodeMap[11] = 'A';
	nodeMap[9] = 'B';
	nodeMap[7] = 'C';
	nodeMap[3] = 'D';
	nodeMap[5] = 'E';
	nodeMap[6] = 'F';
	nodeMap[1] = 'G';
	nodeMap[2] = 'H';
	nodeMap[8] = 'I';
	nodeMap[4] = 'J';
	nodeMap[10] = 'K';

	TreeNode* root = new TreeNode(11);

	TreeNode* node1 = new TreeNode(9);
	root->left_ = node1;

	TreeNode* node2 = new TreeNode(7);	
	root->right_ = node2;

	TreeNode* node3 = new TreeNode(3);	
	node1->left_ = node3;

	TreeNode* node4 = new TreeNode(5);	
	node1->right_ = node4;

	TreeNode* node5 = new TreeNode(6);	
	node2->left_ = node5;

	TreeNode* node6 = new TreeNode(1);
	node2->right_ = node6;

	TreeNode* node7 = new TreeNode(2);
	node3->left_ = node7;

	TreeNode* node8 = new TreeNode(8);
	node3->right_ = node8;

	TreeNode* node9 = new TreeNode(4);
	node5->right_ = node9;

	TreeNode* node10 = new TreeNode(10);
	node6->left_ = node10;

	preorderTraversal(root);
	cout << endl;

	preorderTraversal_customStack(root);

	return 0;
}

结果

在这里插入图片描述
在这里插入图片描述
与预期结果是一致的

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

英伟达GB200系列AI芯片供不应求;阿里云通义灵码上线Visual Studio插件市场

&#x1f989; AI新闻 &#x1f680; 英伟达GB200系列AI芯片供不应求 摘要&#xff1a;英伟达GB200系列AI芯片供不应求&#xff0c;台积电和日月光等公司获追加订单。GB200芯片性能提升30倍&#xff0c;成本和能耗降至25分之一。预计2025年出货量突破百万颗&#xff0c;后段封…

ChatGPT智能对话绘画系统 带完整的安装源代码包以及搭建教程

系统概述 ChatGPT 智能对话绘画系统是一款集智能语言处理和绘画创作于一体的综合性系统。它利用了深度学习和自然语言处理技术&#xff0c;能够理解用户的意图和需求&#xff0c;并通过与用户的交互&#xff0c;生成富有创意的绘画作品。该系统的核心是一个强大的人工智能模型…

护眼台灯什么牌子好一点?五款高性能的护眼台灯品牌推荐

随着社会竞争的日益激烈&#xff0c;众多家长在子女教育上的投入愈发深厚&#xff0c;不遗余力地为他们定制各类课外培优和学习计划。在自然光线充足的白日&#xff0c;孩子们阅读或完成作业相对舒适。然而&#xff0c;当夜幕降临&#xff0c;室内光线若显得昏暗或亮度不足&…

FPGA - DFT(离散傅里叶变换)—FFT(快速傅里叶变化)

一&#xff0c;DFT(离散傅里叶变换原理) 1&#xff0c;DFT(离散傅里叶变换原理)理论简介 在数字信号处理中有一个基本概念&#xff1a; 如果信号在频域是离散的&#xff0c;则该信号在时域就表现为周期性的时间函数&#xff1b;相反&#xff0c;如果信号在时域是离散的&#x…

FreeCAD多文档管理及文档组成

FreeCAD的Application和Document都分为App和Gui两层。 1.App::Application功能 App层的Application主要包含两个功能&#xff1a;管理文件和管理配置。 分析App&#xff1a;&#xff1a;Application的成员变量。 App::Application具有一个存储文档对象的容器DocMap以及其他管…

视创云展虚拟展厅融入AI智能助手,有哪些优势?

随着科技的日新月异&#xff0c;AI人工智能技术在各行业中已经得到了广泛的应用和实践&#xff0c;正深刻改变着我们的工作和生活方式。 为了给企业的营销展示注入新的活力&#xff0c;视创云展在其虚拟展厅中巧妙融入了「AI智能助手」。当用户沉浸在虚拟展厅的自由探索之中时…

finalize——释放内存

重写 没写的话就按照定义的方法&#xff0c;object的默认方法 system.gc会主动调用垃圾回收器&#xff0c;不会使用finalize方法。需求不大 对于用debug怎么进入jdk源码&#xff0c;ararry.sort的源码进入

ravynOS 0.5.0 发布 - 基于 FreeBSD 的 macOS 兼容开源操作系统

ravynOS 0.5.0 发布 - 基于 FreeBSD 的 macOS 兼容开源操作系统 ravynOS - 一个旨在提供 macOS 的精致性和 FreeBSD 的自由度的操作系统 请访问原文链接&#xff1a;https://sysin.org/blog/ravynos/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页…

未来科技中的RTK接收机应用探索

RTK实时差分定位技术&#xff08;RTK&#xff0c;Real-Time Kinematic&#xff09;&#xff0c;作为高精度定位技术的一种重要手段&#xff0c;已经在地理测绘、测量工程、航空航天等领域取得了广泛应用。随着科技的不断发展&#xff0c;RTK导航接收机的应用领域也日益拓宽。首…

stm32学习笔记---TIM输出比较(理论部分)

目录 TIM简介 定时器类型 基本定时器的结构图 时基单元 预分频器 计数器 自动重装寄存器 主模式触发DAC的功能 通用定时器的结构图 计数器的计数模式 内外时钟源选择和主从触发模式的结构 外部时钟模式2 外部时钟模式1 其他部分 输出比较电路 输入捕获电路 高…

HBase:大数据时代的分布式存储利器

HBase&#xff1a;大数据时代的分布式存储利器 HBase&#xff1a;大数据时代的分布式存储利器1. HBase简介2. HBase特点3. HBase应用场景4. 总结 HBase&#xff1a;大数据时代的分布式存储利器 随着互联网和大数据技术的飞速发展&#xff0c;数据存储和计算需求呈现出爆炸式增…

VMware Workstation环境下,用作测试的客户端,ubuntu安装体验案例

需求说明: 作为学习者&#xff0c;为了学习网络技术&#xff0c;网络操作系统管理技术&#xff0c;学习者首先需要有台计算机&#xff0c;其次需要在自己的计算机安装学习要用到的网络操作系统、模拟软件等。但由于计算机上一般使用的是Windows 10或Windows 7桌面操作系统&…

7款三维地球软件/框架:Google Earth SkylineGlobe,Cesium等

可视化大屏已经不满足于2D和3D展示了&#xff0c;开始向着星辰大海迈进了&#xff0c;本文介绍7款三维地球软件/开发框架&#xff0c;带各位老铁入个门。 1. Google Earth: 大名鼎鼎&#xff0c;Google Earth 是由 Google 开发的一款免费的虚拟地球软件。它提供了全球范围内的…

无线领夹麦克风哪个牌子好,一篇教你无线领夹麦克风怎么挑选!

对于领夹麦克风这一术语&#xff0c;可能在非专业人士听来颇为生僻&#xff0c;然而在互联网行业工作者和短视频博主中&#xff0c;它却是一个常见的必备工具。如果你正计划成为一名短视频创作者&#xff0c;或者即将涉足视频拍摄与直播等互动媒体活动&#xff0c;那么熟悉并掌…

python-九九乘法表(对齐式1)

[题目描述] 输出九九乘法表&#xff0c;输出格式见样例。输入格式&#xff1a; 无输出格式&#xff1a; 输出乘法表&#xff0c;对齐方式见样例输出。样例输入 无样例输出 来源/分类&#xff08;难度系数&#xff1a;一星&#xff09; 完整代码展示&#xff1a; #对齐式1 a[] …

【CT】LeetCode手撕—124. 二叉树中的最大路径和

目录 题目1- 思路递归 dfs 思路 2- 实现⭐124. 二叉树中的最大路径和——题解思路 3- ACM 实现 题目 原题连接&#xff1a;124. 二叉树中的最大路径和 1- 思路 模式识别&#xff1a;最大路径和 ——> 递归 递归 dfs 思路 递归公式 sum 自己 左 右 递归中的返回结果…

PowerPaint:强大扩图编辑工具,兼具上下文感知和文本引导对象修复,ComfyUI体验指南

大家好我是极客菌&#xff01; ComfyUI扩图编辑工具&#xff0c;是一款功能强大的图像编辑软件&#xff0c;集成了多种先进的图像处理技术和创意工具。无论你是想要放大图像、修复图像中的缺陷&#xff0c;还是想要实现上下文感知和文本引导对象修复&#xff0c;ComfyUI都能轻…

TypeError: compilation.getPathWithInfo is not a function

本地运行&#xff0c;npm run dev 正常启动&#xff0c;当修改内容后保存&#xff0c;出现报错&#xff0c;中断编译。 TypeError: compilation.getPathWithInfo is not a function 项目首次能成功运行&#xff0c;热更新时报错而中断&#xff1b; 参考网上的解决办法&#x…

Webpack: 底层配置逻辑

概述 Webpack 5 提供了非常强大、灵活的模块打包功能&#xff0c;配合其成熟生态下数量庞大的插件、Loader 资源&#xff0c;已经能够满足大多数前端项目的工程化需求&#xff0c;但代价则是日益复杂、晦涩的使用方法&#xff0c;开发者通常需要根据项目环境、资源类型、编译目…

Python生成器嵌套太多?使用yield from秒变简洁!

目录 1、yield from基础概念 🌐 1.1 yield关键字回顾 1.2 yield from引入动机 2、yield from深入解析 🧭 2.1 语法与用法 2.2 传递生成器控制权 2.3 与迭代器的高效整合 2.4 与传统yield对比优势 3、实战应用示例 📈 3.1 链接多个生成器 3.2 简化递归生成器实…