二叉树的遍历(递归)

C语言实现二叉树的递归遍历与非递归遍历 本文实现了对二叉树的递归遍历和非递归遍历,当然还包括了一些栈操作。           二叉树的遍历本质上其实就是入栈出栈的问题,递归算法简单且容易理解,但是效率始终是个问题。非递归算法可以清楚的知道每步实现的细节,但是乍一看不想递归算法那么好理解,各有各的好处吧。接下来根据下图讲讲树的遍历。           1、先序遍历:先序遍历是先输出根节点,再输出左子树,最后输出右子树。 阅读详情

1058: 二叉树遍历

时间限制: 1 Sec  内存限制: 128 MB
提交: 18  解决: 8
[ 提交][ 状态][ 讨论版]

题目描述

对于二叉树T,可以有先序遍历、中序遍历和后序遍历三种遍历方式。现在我们要求给出一棵二叉树的先序遍历序列和中序遍历序列,输出它的广度优先遍历序列。 

输入

第一行为一个整数t(0<t<10),表示测试用例个数。 以下t行,每行输入一个测试用例,包含两个字符序列s1和s2,其中s1为一棵二叉树的先序遍历序列,s2为中序遍历序列。s1和s2之间用一个空格分 隔。序列只包含大写字母,并且每个字母最多只会出现一次。

输出

为每个测试用例单独一行输出广度优先遍历序列。

样例输入

2DBACEGF ABCDEFGBCAD CBAD

样例输出

DBEACGFBCAD

提示

本题主要测试对二叉树遍历的理解。需要先根据先序序列和中序序列建立二叉树,然后对二叉树进行按层次的遍历。




AC源码:

#include <iostream>
#include <queue>
#include <cstdlib>
#include <cstdio>
#include <vector>
using namespace std;
struct node
{
	char value;
	node* lft;
	node* rgt;
	node(char v):value(v),lft(0),rgt(0){}
};

node* build_tree(vector<char> x,vector<char> y)
{
	if(x.empty()&&y.empty())
		return nullptr;
	node* root=new node(x.front());
	vector<char> A1,A2,B1,B2;
	int cnt=0;
	while(y[cnt]!=x.front())
		cnt++;
	for(int i=1;i<=cnt;++i)
		A1.push_back(x[i]);
	for(int i=0;i<cnt;++i)
		A2.push_back(y[i]);
	for(int i=cnt+1;i<x.size();++i)
		B1.push_back(x[i]);
	for(int i=cnt+1;i<y.size();++i)
		B2.push_back(y[i]);
	root->lft=build_tree(A1,A2);
	root->rgt=build_tree(B1,B2);
	return root;
}
void bfs(node* root)
{
	queue<node*> que;
	que.push(root);
	while(!que.empty())
	{
		auto nd=que.front();que.pop();
		cout<<nd->value;
		if(nd->lft)
			que.push(nd->lft);
		if(nd->rgt)
			que.push(nd->rgt);
	}
}
int T;
int main()
{
	cin>>T;
	while(T--)
	{
		vector<char> x,y;
		char s1[30],s2[30];
		scanf("%s %s",s1,s2);
		for(int i=0;s1[i];i++)
			x.push_back(s1[i]);
		for(int i=0;s2[i];i++)
			y.push_back(s2[i]);
		node* root=build_tree(x,y);
		bfs(root);
		cout<<endl;
	}
	return 0;
}


二叉树递归与非递归遍历 二叉树的遍历 常见的二叉树的遍历有三种方式:先序遍历(根结点,左子树,右子树) 中序遍历(左子树,根结点,右子树)    后续遍历(左子树,右子树,根结点) 这三种方式有分别可以用递归和非递归来实现 先序遍历的主要步骤:(参考下图) 1.从根结点开始先压左路结点,并访问结点,直到把根结点和左路结点全部压入栈。 2.若左子树和为空,说明左路和根结点已经全部压栈并且已经访问过了,开始取栈顶元素来访问上一层父节点的右子树。把 右子树看成子问题继续进行1步骤。 3.依次进行上述1和2 阅读详情

相关推荐

二叉树遍历——递归与非递归实现

二叉树遍历——递归与非递归实现描述分析递归版本的二叉树遍历设计代码非递归版本的二叉树遍历非递归先序遍历设计步骤代码非递归后序遍历设计步骤代码非递归中序遍历设计步骤代码非递归遍历二叉树完整代码及测试 描述 实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式。 分析 使用递归实现二叉树遍历十分容易。在递归过程中,系统自动帮你压栈从而回溯时,关键信息不会被丢失。而非递归实现二叉树遍历时,无法再依...

jjy223404的博客 1048

问题 J: 二叉树遍历

问题 J: 二叉树遍历 时间限制: 1 Sec 内存限制: 128 MB 提交: 720 解决: 289题目描述对于二叉树T,可以有先序遍历、中序遍历和后序遍历三种遍历方式。现在我们要求给出一棵二叉树的先序遍历序列和中序遍历序列,输出它的广度优先遍历序列。 输入第一行为一个整数t(0<t<10),表示测试用例个数。 以下t行,每行输入一个测试用例,包含两个字符序列s1和s2,其中s1为一棵二叉

Warren's Blog 1074

RTAB-map:实时高效的SLAM库

Real‐time appearance‐based mapping (RTAB‐Map)是一种基于外观的闭环检测方法,具有良好的内存管理,以满足处理大场景和在线长周期管理要求。RTAB‐Map集成了视觉和激光雷达SLAM方案,并支持目前绝大多数的传感器 是一个强大的、开源的Simultaneous Localization and Mapping(SLAM)库,专为机器人和无人驾驶领域设计。它提供了一套完整的解决方案,用于构建三维地图,并在未知环境中进行实时定位与导航。 github项目地址 RTAB-

weixin_45761399的博客 1万+

DS二叉树—二叉树构建与遍历(不含框架)

题解: 这里面myTree中的root成员是在main函数中声明,但在CreateTree中malloc,所以注意CreateTree函数要传引用。 题目: 问题 A: DS二叉树—二叉树构建与遍历(不含框架) 时间限制: 1 Sec 内存限制: 128 MB 提交: 498 解决: 384 [提交][状态][讨论版] 题目描述 给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘#’表示,例如AB#C##D##),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序

夜阑優琿 1177

手持式激光测距仪全套方案

激光测距全套方案,包括原理图、源代码、PCB、BOM、光学部分资料,结构、特殊元件数据手册及供应商联系方式,提供调试技术文档。全套方案已成功打板验证,实现0.05~50m测量范围,精度在+/—1.5mm,激光波长635~650nm,功率《1mW。方案预留了TTL串口、RS485接口,可通过串口助手看到测量数据,可自行DIY或者商业开发。无论是电路小白,还是技术大拿,都能通过方案资料成功做出一套激光测距仪。

Laser01的博客 2055

Midas Civil实战避坑指南:从建模报错到施工阶段分析

本文详细解析了Midas Civil在桥梁建模与施工阶段分析中的实战避坑技巧,涵盖从基础建模到高级边界条件设置的全流程。针对截面定义、节点创建、施工荷载区分等常见问题提供专业解决方案,帮助工程师避免计算误差,提升结构分析效率。特别强调施工阶段荷载与恒荷载的正确处理,以及弹性连接的合理应用。

weixin_30319153的博客 349

二叉树之层次遍历

题目: 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 您在真实的面试中是否遇到过这个题?  Yes 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [9,20], [15,7] ] 思

SDAUguo的博客 328

freeswitch系列二 kamailio 5.0安装及实现kamailio集成freeswitch

kamailio是个纯粹的SIP服务器。本文介绍先如何在debian8下安装debian5.0,然后详细介绍如何实现使用kamailio做freeswitch均衡负载。kamailio同时实现做为代理服务器、注册服务器、重定向服务器。

不积跬步无以至千里; 不积小流无以成江海 1万+

DS二叉树--层次遍历

题解: 注意CreateTree传引用!!!又被卡在这个问题上了。。。 层次遍历的方法是利用队列,先放入根节点,之后每每弹出一个元素就放入它的左右孩子节点,如果左右孩子为NULL则不放入,直到队列为空。 题目: 问题 F: DS二叉树--层次遍历 时间限制: 1 Sec 内存限制: 128 MB 提交: 389 解决: 337 [提交][状态][讨论版] 题目描述 层次遍历二叉树,是从根结点开始遍历,按层次次序“自上而下,从左至右”访问树中的各结点。 建树方法采用“先序遍历+空树用0表示”的方法

夜阑優琿 1184

物料帐配置之 重估消耗

物料帐配置 ML material ledger

SAP刺客的博客 5912

用 ADT 连接 SAP S/4HANA Public Cloud 开发租户的完整落地指南

摘要:在SAP S/4HANA公有云中进行ABAP开发时,必须使用Development Tenant(客户端080)而非Customizing Tenant(客户端100)连接ADT工具。开发用户需具备SAP_BR_DEVELOPER角色且写权限不受限,开发对象应创建在结构包的子包中。连接前需确认正确的ABAP服务URL(通常为Launchpad URL去掉"/ui"),并通过运行控制台程序验证全链路功能。典型开发场景如通过BAdI实现业务校验时,需遵循Clean Core原则在指定包

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 339

复原二叉树

复原二叉树 时间限制: 1 Sec  内存限制: 128 MB 题目描述 小明在做数据结构的作业,其中一题是给你一棵二叉树的前序遍历和中序遍历结果,要求你写出这棵二叉树的后序遍历结果。 输入 输入包含多组测试数据。每组输入包含两个字符串,分别表示二叉树的前序遍历和中序遍历结果。每个字符串由不重复的大写字母组成。 输出 对于每组输入,输出对应的二叉树的后序遍历结果。 样例输入 D...

紫芝的博客 1210

海康VisionMaster与西门子PLC1200进行S7通信

通信是连通算法平台和外部设备的重要渠道,在海康VisionMaster算法平台中既支持外部数据的读入也支持数据的写出,当通信构建起来以后既可以把软件处理结果发送给外界,又可以通过外界发送字符来触发相机拍照或者软件运行。 本文以西门子PLC1200作为外部设备为例,讲解海康VisionMaster与西门子PLC1200进行S7通信。......

haier123888的博客 1万+

详解二叉树的非递归遍历

本文转载自:http://blog.csdn.net/zhangxiangdavaid/article/details/37115355 前言   对于二叉树的递归遍历比较简单,所以本文主要讨论的是非递归版。其中,中序遍历的非递归写法最简单,后序遍历最难。 节点的定义: //Binary Tree Node typedef struct node { int data; ...

编程随笔与杂谈 10万+

手把手教你学Simulink——电机电磁兼容与可靠性场景示例:基于Simulink的电机噪声抑制控制仿真

本文带你完成了电机噪声抑制控制的Simulink仿真,实现了:✅ 揭示了电磁噪声从电流到声音的传递机理✅ 搭建了含死区、固定载波等噪声源的高保真模型随机PWM(消除啸叫)谐振控制器(抑制5/7次嗡鸣)谐波注入(降低THD) ✅ 通过综合方案将噪声降低10 dB以上(感知响度减半!) ✅ 为产品静音品质提升提供可落地的控制方案。

MHD0815的博客 94

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现

1)递归序,3次见面,第一次见面打印叫先序遍历,第二次见面打印叫中序遍历,第三次见面打印叫后序遍历 2)非递归实现中,先序和后序是相反的,但是中序遍历挺难理解,但是核心思想也就是先去左树,再打印头,然后再去右树。 3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

weixin_46838716的博客 7748

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

二叉树递归遍历与非递归遍历

二叉树递归遍历与非递归遍历 二叉树递归遍历与非递归遍历 引言 递归式遍历 前序遍历 中序遍历 后序遍历 非递归式遍历 前序遍历 中序遍历 后序遍历 一种更简单的非递归式遍历 前序遍历 中序遍历 后序遍历 引言 由于二叉树是由递归定义的一种数据结构,因此递归式遍历也就是最符直觉的一种遍历方式。此外,由于递归的简洁性以及三种递归的高度统一,因此递归式遍历也是容

2614

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

二叉树的递归遍历

二叉树的递归遍历 简单递归遍历二叉树. #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define TRUE 1 #define FALSE 0 #define SIZEINIT 10 #define INCRESIZE 5 typedef i...

路漫远 吾求索 4374

详解二叉树的递归遍历与非递归遍历——(二)

非递归遍历    上一边文章中,咱们谈到了二叉树的递归遍历,也是十分的简单哈,这回又继续将非递归遍历写一下。从前序开始扯吧,哈哈!!! 先给出存储结构: typedef struct Node{       int data; //保存节点中的值     ...

一扣解千愁的博客 3616

二叉树的非递归遍历

二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。 ​ 三种遍历方式访问节点的顺序是一致的,不同之处在于,有的遍历流程把访问到的节点暂存起来,达成某种条件后再将节点输出。

qq_43169752的博客 1万+

二叉树的遍历的递归与非递归算法

看了以上三种方式遍历二叉树的例子,应该就能明白三种遍历方式的本质与区别,其实我们可以看出,无论以何种方式,我们只要把握好访问的顺序,并且将每一个根结点下的子树都看成一个新树,再按照某种遍历方式访问这个这个新树即可!例子:中缀表达式转后缀表达式;(前缀表达式:波兰表达式;后缀表达式:逆波兰表达式)前缀表达式:-+a*bc/de(也就是以先序遍历访问上述二叉树的顺序)中缀表达式:a+b*c-d/e(也就是以中序遍历访问上述二叉树的顺序)

cx330的博客 2380

详解二叉树的递归遍历与非递归遍历

二叉树的遍历 所谓二叉树的遍历,是指按某条搜索路径访问树中的每个节点,使得每个节点均被访问一次,而且仅被访问一次。 遍历二叉树需要决定对根节点N、左子树L、右子树R的访问顺序(按照先遍历左子树在遍历右子树的原则),常见的遍历次序有先序(NLR)、中序(LNR)、后序(LRN)三种遍历算法,这也是最常见的二叉树遍历算法。 其中的“序”实际上就是根节点的访问时机。 1. ...

一扣解千愁的博客 8435

二叉树的递归和非递归遍历

二叉树递归和非递归遍历

bubbleyang的博客 3214

二叉树遍历之递归算法

二叉树的遍历算法有多种,典型的有先序遍历、中序遍历、后序遍历以及层序遍历。而且这些遍历的递归算法较为简单,代码很少,容易实现,本文就是汇总二叉树遍历的递归算法,非递归算法将在下一篇文章中进行总结。本文中用到的二叉树实例如下: 3 / \ 9 20 / \ 15 7 二叉树定义和辅助函数如下: struct node {

__七把刀__ 1万+
上一篇: 硬币问题(经典dp)
下一篇: hdu problem1166 (树状数组)
OFShare
博客等级 码龄11年 8粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值