二叉树的非递归遍历实现

PTA 数据结构 二叉树的非递归遍历 pintia PTA 二叉树的非递归遍历 这一题写的我快要吐了,讲述一下心酸历程。 6-3 二叉树的非递归遍历 (10 分) 本题要求用非递归的方法实现对给定二叉树的 3 种遍历。 函数接口定义: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderTraversal( BinTree... 阅读详情
#include <iostream>
#include <stack>
#include <vector>
#include <algorithm>
#include <cmath>
#include <unordered_map>
#include <string.h>
using namespace std;
const int maxn = 2e5+32;
#define LL long long
const int inf = 0x3f3f3f3f;

struct Tree
{
	int val;
	Tree *left,*right;
	Tree(int v,Tree *l,Tree *r):val(v),left(l),right(r){}
};

unordered_map<Tree*,int>flag;


void preOrder(Tree* root)
{
	stack<Tree*> q;
	while(root!=NULL||!q.empty())
	{
		if(root!=NULL){

			q.push(root);
			cout<<root->val;
			root=root->left;
		}else{
			root=q.top()->right;
			q.pop();
		}
	}
}

void midOrder(Tree* root)
{
	stack<Tree*> q;
	while(root!=NULL||!q.empty())
	{
		if(root!=NULL){

			q.push(root);
			root=root->left;
		}else{
			root=q.top()->right;
			cout<<q.top()->val;
			q.pop();
		}
	}
}



void postorder(Tree *root)//可以用存pre指针,就不需要标记了
{
	stack<Tree*> q;
	q.push(root);
	while(!q.empty()){
		Tree *cur=q.top();
		if(flag[cur]==1||(cur->left==NULL&&cur->right==NULL)){
			printf("%d\n",cur->val);
			q.pop();
		}else{
			if(cur->right) q.push(cur->right);
			if(cur->left) q.push(cur->left);
			flag[cur]=1;
		}
	}
}



int main()
{
	Tree *a[20];
	a[7]=new Tree(7,0,0);
	a[6]=new Tree(6,0,a[7]);
	a[5]=new Tree(5,a[6],0);
	a[4]=new Tree(4,0,0);
	a[3]=new Tree(3,0,0);
	a[2]=new Tree(2,a[3],a[4]);
	a[1]=new Tree(1,a[2],a[5]);

}

 

二叉树的三种遍历非递归实现 二叉树的遍历实现 阅读详情

相关推荐

二叉树遍历,栈实现二叉树的非递归遍历

另见求树高 http://blog.csdn.net/Justme0/article/details/7694704 /******************************************************************** created: 2014/05/11 23:13 filename: main.c author: Just

Tham 在思索中前行! 1892

C语言(六)

1、二叉树的非递归遍历 本题要求用非递归的方法实现对给定二叉树的 3 种遍历。 输入:输入二叉树结点构建二叉树 输出:输出 3 个函数分别按照访问顺序打印出结点的内容 include <stdio.h> #include <stdlib.h> typedef enum { false, true } bool; typedef char ElementType; typedef struct TNode *Position; typedef Position BinTree

waittttttttttt的博客 703

java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)

java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)

二叉树三种遍历(递归及非递归)的实现

#include #include #include using namespace std; template struct TreeNode { T _value; TreeNode* _firstChild; TreeNode* _nextBorther; }; template struct BinaryTreeNode { T _value; BinaryTreeNo

Runner的专栏 537

玄机-Linux权限维持-后门

玄机-Linux权限维持-后门

m0_46439803的博客 762

VHDL按键消抖(状态机版本)

检测下降沿:设置一个和,分别代表之前的之前和之前的信号状态,若两个信号key_in_d2=1,key_in_d1=0,他俩的not key_in_d2 and key_in_d1为1,则说明下降沿产生,把它设置为标志位key_flag。延时计数:50MHz的板子每次计数需要20ns,而抖动时间大约为5-10ms。所以取7ms,作为延时时间。可以看见当检测到下降沿时,开始计数计数计满再次检测,若为低电平则为按下按键,否则为抖动。通过检测下降沿来临,延时计数再次检测,如果为低电平则为按键按下。

qq_69639216的博客 1083

数据结构PTA习题:基础实验4-2.3 二叉树的非递归遍历 (25分)

基础实验4-2.3 二叉树的非递归遍历 (25分) 本题要求用非递归的方法实现对给定二叉树的 3 种遍历。 函数接口定义: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderTraversal( BinTree BT ); 其中BinTree结构定义如下: typede...

wulila的博客 3849

MediaCreationToolW11:Windows11系统升级与修复利器

在日常使用Windows11系统的过程中,我们可能会遇到一些棘手的问题,比如系统更新时出现异常导致无法成功更新,或者系统本身出现异常需要进行无损修复。此外,当我们的电脑尚未升级到Windows11,而我们又希望进行升级时,一款高效且可靠的工具就显得尤为重要。接下来,MediaCreationToolW11将开始下载Windows11的安装文件,并创建Windows11介质。在“选择你要执行的操作”界面中,选择“ISO文件”。此时,你可以使用你的账户登录系统,并开始使用全新的Windows11系统了。

nntxthml的博客 2403

二叉树-非递归遍历

1 先序遍历 2 中序遍历 3 后序遍历

oayoat blog 253

QT与Coin3D实现机器人的仿真

前言 Coin3D编程环境配置好后,开始下一步的机器人仿真任务。本文根据在研5轴机器人,完成三维模型生成与机器人的仿真。主要参考博主冯Jungle的博客,在此表示感谢。 ——2021.05.23 环境 Win10:VS2019、QT5.15.2、Coin3D、SolidWorks2016 机器人三维模型生成 目前广泛应用于因特网的VRML ( Virtual Reality Modeling Language,虚拟现实建模语言)为用户提供一种可参与的、并能对场景中对象主动做出反应的虚拟现实环境,现已成

焦露的博客 6905

从入门到精通:MATEKH743 飞控全解析——MAVLink 接口软/硬件对接实战

MATEKH743飞控是基于STM32H743微控制器的无人机核心控制系统,具备强大计算能力和丰富外设接口。该飞控采用双核架构,集成高性能IMU、气压计等传感器,支持多种开源固件(Betaflight/INAV/ArduPilot),适用于FPV穿越机、固定翼及工业无人机。相比PX4等飞控,MATEKH743在性价比和DIY友好度上优势明显,同时支持MAVLink协议实现设备通信。未来发展方向包括集成更高精度传感器、优化电源管理以及拓展工业应用场景,持续推动无人机技术创新。

bother3000的博客 2283

详解二叉树遍历的非递归实现

非递归遍历通过使用栈、队列等辅助数据结构,以迭代的方式模拟递归过程,从而避免了递归调用带来的栈溢出风险和高空间复杂度问题。非递归实现不仅能够更有效地利用内存资源,还能在一定程度上提升算法的执行效率,使得程序在处理大型数据时更加稳定和高效

1326

告别手动下载!用Python脚本5分钟搞定NREL风速数据(附完整API调用代码)

本文详细介绍了如何使用Python脚本自动化获取NREL风速数据,从API密钥申请到数据保存的全流程。通过完整的API调用代码和实战技巧,帮助研究人员和开发者高效下载全球高精度风速数据,告别繁琐的手动操作,提升工作效率。

weixin_33724059的博客 296

二叉树遍历之非递归实现

二叉树遍历之非递归实现      二叉树遍历算法的重要性大家都知道,是很多算法的基础,它的递归实现非常简单,相信学过数据结构的同学都应该能够轻松写出来。如果需要写出二叉树的前序遍历、中序遍历以及后续遍历的非递归实现,可能还是需要费点时间。下面给出我的实现方式。 前序遍历:     二叉树的前序非递归实现可以按照这样的思路:毫无疑问,我们需要一个栈来作为辅助空间,首先将根节点入

doufei_JLU_CCST_08 1325

基于Simulink的基于MPC的实时ZMP约束步态优化仿真

本文完成了基于Simulink的MPC实时ZMP约束步态优化仿真,实现了:✅ 建立3D-LIPM预测模型✅ 设计带ZMP可行域约束的MPC优化器✅ 实现闭环实时求解与扰动抑制✅ 验证强鲁棒性与安全性✅ 为人形机器人野外行走、人机交互提供先进控制方案。

xiaoheshang_123的博客 84

基于学术研究风云卫星数据下载教程

目录 一、相关网址 1.登录注册网址:国家卫星气象中心 2.风云数据服务客户端下载网址 3.风云卫星遥感数据服务网址 二、下载数据步骤 1.首先在注册登录网址,注册一个账户 2.待账户审核后,登录账户即可搜索并下载数据 三、相关工具下载 1.登录风云卫星遥感数据服务网址 2.NCSA HDFView软件 3.风云卫星数据(L1)处理软件包(FENGYUN Toolkit v1.1) 4.静止卫星云图分区图显示软件(SECView) 5.风云二号静止气象卫星数据及产品处理..

珞瑜的博客 1万+

非递归实现二叉树先序、中序、后序遍历(栈实现)

本篇文章主要详解利用栈的方式二叉树先序、中序、后序遍历的非递归写法首先我们需要实现一颗二叉树。以下是通过先序序列建树的代码例如:先序序列{1,2,4,10,'#','#',6,11,'#','#',7'#','#','#',3,8,'#','#',9}代表以下的树typedef struct Node { int _data; Node* _right; Node* _left; Node...

qq_38134165的博客 1万+

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

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

二叉树的中序遍历(非递归实现)

一、递归实现前序,序,后序遍历;对于二叉树,前面已经采用递归的方式实现的其前序,中序,后序遍历,具体请参见:http://blog.csdn.net/dai_wen/article/details/78955411那么,如何采用非递归的方式遍历树呢?下面,以实现中序遍历二叉树为主题展开:二、非递归实现 中序遍历:1,结构: 首先,对于中序遍历,我们知道,原则是先走到的结点后访问,后走到的结点

dai_wen的博客 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

OV9734 DATASHEET,完整规格书

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

二叉树前中后序遍历非递归实现C++

前几天面试过程中面试官让手写一下二叉树后序遍历的非递归写法,当时没有写出来,本想着可能是因为面试太紧张的原因,才这么简单的题都没写出来,后来特地去研究了一下,发现二叉树的后序遍历非递归实现还真的没我想的那么简单,在此写个博客记录一下,顺便把前序和中序的非递归实现也写出来。 后序遍历非递归实现 #include <iostream> #include <stack> usi...

玉米味土豆片 972

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C语言实现二叉树的非递归中序遍历

C语言实现二叉树的非递归中序遍历创建一个栈栈的操作函数怎样实现非递归中序遍历完整代码和测试结果 创建一个栈 注意,这个栈的目的时用来保存结点地址的。因为我们在出栈时,还需判断结点的右节点的情况,如果只是保存结点的值,是无法实现中序遍历的。 现在我们来创建一个栈。首先定义一个栈的结构,不过之前还需定义一个节点结构 节点定义 typedef struct BinaryTreeNode{ int data; struct BinaryTreeNode *lchild, *rchild;//左右孩子指针 }B

weixin_43744293的博客 4892

【数据结构】非递归实现二叉树的中序遍历

【数据结构】非递归实现二叉树的中序遍历

每天进步一点丶的博客 3782

二叉树非递归遍历实现

二叉树遍历的非递归实现 基础知识 二叉树的遍历分为深度优先遍历(DFS)和广度优先遍历(BFS)。 深度优先遍历:尽可能地向左(或右)进行,在遇到第一个转折点,向左(或右)一步,然后再尽可能地向左(或右)发展。这一过程重复直到访问了所以节点。树的深度优先遍历一般有三种: VLR——前序遍历(根左右) LVR——中序遍历(左根右) LRV——后序遍历(左右根) 核心思路 遍历时一定要搞清楚一点就是,输出都是根节点(核心思想),因此不同的遍历方式仅仅是根节点的输出时机不同。 中序遍历:访问顺序为左根右。遇到节点

qq_38537501的博客 609

二叉树遍历的非递归实现方法

二叉树的遍历,通常分为前序、中序、后序和层序遍历。而前序、中序和后序遍历,我们一般刚开始接触的都是递归实现的方式,这种情况不再赘述,本文是主要介绍的是二叉树遍历的非递归实现方法。 首先,定义树节点的结构: class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x;

sunset108的专栏 789

C语言实现二叉树的非递归遍历

C语言实现二叉树的非递归遍历:        代码解释:非递归前序遍历:         1&gt; 首先建立一个二维指针,用来存储每个结点的地址,定义栈顶指针top,初始值为-1,并将根结点存入栈中,top++;         2&gt; 进入while循环,栈顶指针不为-1,则进入while循环,输出当前栈顶元素p的数据域,代表前序遍历的第一个结点为根结点;         3&gt; 如果...

Future_LL的博客 1万+

二叉树遍历非递归实现

【版权声明:转载请保留出处:blog.csdn.net/algorithm_only。邮箱:liuy0711@foxmail.com】 遍历是二叉树各种操作的基础,上一节给出的遍历算法是递归实现的,本节给出二叉树遍历的非递归实现,非递归实现需要使用前面讲到的数据结构——栈、队列来作为辅助空间。 先序遍历 int preorder_traverse(bitree bt, int (*v

专注于算法 7086
上一篇: 实现next_permutation
下一篇: Codeforces Round #452 (Div. 2) - F. Letters Removing(树状数组+set)
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值