二叉树中序非递归遍历

二叉树前序、中序、后序遍历非递归写法的透彻解析 前言 在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的: 阅读详情
package main

import (
	tree "awesomeProject/interview/Tree"
	"fmt"
)

//非递归中序遍历(left->root->right)
func inorderTraversal(root *tree.Node) []int {
	result := make([]int, 0)
	if root == nil {
		return result
	}
	stack := make([]*tree.Node, 0)
	//首先判断左子树是否为空,然后判断根节点是否为空,先把左子树遍历完成
	for len(stack) > 0 || root != nil {

		//只有右节点才进行第二次遍历
		for root != nil {
			//左节点入栈
			stack = append(stack, root)
			//一直遍历完左子树
			root = root.Left
		}

		//左子树已经遍历完,压入结果
		val := stack[len(stack)-1]
		stack = stack[:len(stack)-1]
		result = append(result, val.Val)
		root = val.Right //右节点

	}
	return result
}


func main() {
	/*
		1
		/\
		2  3
		/\ /\
		4 56 7
	*/

	root := tree.NewNode(1)
	left1 := tree.NewNode(2)
	right1 := tree.NewNode(3)
	root.Left = left1
	root.Right = right1

	left2 := tree.NewNode(4)
	right2 := tree.NewNode(5)
	left1.Left = left2
	left1.Right = right2

	left3 := tree.NewNode(6)
	right3 := tree.NewNode(7)

	right1.Left = left3
	right1.Right = right3

	fmt.Println(inorderTraversal(root))  //[4 2 5 1 6 3 7]
}

 

C/C++ 二叉树的非递归遍历(前序、中序、后序非递归遍历) 二叉树的非递归遍历C/C++实现: 非递归先序遍历代码: void PreOrderTraversal (struct tree* root) { //非递归先序遍历 struct tree* temp = root; while (temp != NULL || S.top > 0) { while (temp != NULL) { ... 阅读详情

相关推荐

线索二叉树(中序线索化,非递归遍历)

#include<stdio.h> #include<stdlib.h> typedef char Type; typedef struct Node{ Type val; struct Node *lchild, *rchild; int ltag, rtag;//0-thread, 1-link }Node, *Bptr; Bptr pre; void I...

Basic_ants的博客 1589

数据结构之---非递归中序遍历二叉树

二叉树中序非递归遍历算法实现 大家好,我是刚刚起步的萌新,最近在学数据结构,此次为大家分享二叉树的中序非递归遍历算法,实现及差错修改。 1.第一步呢我们需要创建二叉树,栈,基本栈方法这些我们就不一一说了,网上有很多。或可以联系我qq3434394197,代码如下: #include "stdio.h" #include "stdlib.h" #define MaxSize 50 typedef i...

weixin_44462351的博客 7126

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

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

weixin_46847295的博客 871

二叉树的中序非递归遍历

二叉树的中序非递归遍历 中序遍历的非递归算法描述如下: 从根节点开始检索,如果当前节点不为空,则将当前节点入栈,让当前节点成为其左孩子节点,再继续上一步的操作 加入当前节点为空了,说明其父节点已经没有左孩子了,那么将栈顶元素出栈并输入 判断栈顶元素是否有右孩子,如果有右孩子,则停止依次继续出栈的操作,并检索它的右孩子,重复第一步;如果没有右孩子,则继续将栈顶元素出栈 当栈为空,并且当前节点为空时,遍历完成,退出; #include<stdio.h> #include<stdlib.h&

weixin_45863060的博客 8773

遥感影像分割实战:LoveDA数据集从下载到训练全流程指南(附避坑技巧)

本文以LoveDA数据集为例,提供了一份详尽的遥感影像语义分割实战指南。内容涵盖从数据下载、理解与预处理,到环境配置、模型选择与训练,再到性能调优与部署的全流程,并重点分享了多个关键环节的避坑技巧,旨在帮助开发者和研究者高效上手并解决实际问题。

cherry的博客 929

《21天学通C++》阶段性成果测试题——hstring(手写string类)

总体考察了类的使用,缓冲区考察了指针和数组的使用、增删改查、考察编码思维、考察了类的重载。1.初始化子字符串的起始位置为-1,表示未找到,若buffer或findHstring为空,则返回-1。右边的字符串不为空,则分别获取母串和子串的长度(用循环),然后创建一个固定大小的数组。3.然后循环遍历寻找子串在母串中的起始位置,循环时可以通过两个长度相减,避免循环越界。2.如都不为空,则分别获取双方的字符串长度(用循环),然后。右边的字符串为空,则输出原来的字符串。是否为空,有一方为空则返回另一方。

立志成为炼丹师? 1263

二叉树遍历之中序遍历算法(非递归、递归)入门详解

中序遍历的原理很简单,也就是把树根的访问放在中间。访问结点的次序是:“左—>根—>右”,也就是首先访问左子树,之后访问树根,最后访问右子树。对于左、右子树而言,其访问的次序依然是“左—>根—>右”。 不要小看这里的次序发生的改变,其实具体的实现方式比先序遍历也要麻烦了。 二叉树的中序遍历与先序遍历一样,都可以通过递归算法实现,也可以通过非递归算法实现。......

sunnyoldboy博客 2万+

大模型时代的具身智能系列专题(二)

自由形式语言指令 L 指定了一个操作问题,例如“打开最顶部的抽屉”。然而,根据 L 生成机器人轨迹是很困难的,因为 L 可能具有任意长度,或者是不明确的(例如,需要上下文语义)。相反,我们专注于问题的各个阶段(子任务)l_i,它们明确地指定了一个操作任务 (例如,“抓住抽屉把手”,“打开抽屉”),其中被分解的子阶段(子任务)L→l1l2lnL→l1​l2​...ln​由高级规划器(例如,一个LLM或一个基于搜索的规划器)给出。

achao的专栏 2171

二叉树非递归中序遍历

二叉树的非递归遍历 返回到一个List中 中序遍历的递归算法很简单,但是想要非递归的实现,就要用到栈这个数据结构, 那么来看到中序遍历,先访问左节点,再访问根节点,最后访问右节点, 简单来讲就是一层一层地访问,同时保存节点,遇到空节点就往上回溯 左节点为空就返回根节点,右节点为空节返回根节点的根节点(因为当你访问到右节点的时候,你肯定已经访问完了根节点,所以要返回到根节点的根节点去继续迭代) 简单地画一个三层的二叉树自己推一遍基本就懂了 ...

weixin_55504695的博客 3147

SPSS实战:5步搞定多指标联合诊断的ROC曲线分析(附Logistic回归教程)

本文详细介绍了如何使用SPSS软件进行多指标联合诊断的ROC曲线分析。通过5个实战步骤,从数据准备、二元Logistic回归建模生成综合预测概率,到绘制并比较单指标与联合模型的ROC曲线,帮助临床研究者有效整合多个诊断指标,提升模型判别能力(AUC),实现诊断效能的优化。

mqtt6iot的博客 1422

DSP TMS320C6657中FFT函数的调用与具体使用方法

首先明确一点,C6678中FFT的函数形式为: N : length of FFT in complex samples ptr_x : pointer to complex data input ptr_w : pointer to complex twiddle factor ptr_y : pointer to complex output data brev : pointer to bit reverse table containing 64 entries n_min : should be

Kayboy的博客 3011

二叉树的中序遍历非递归算法

*非递归算法思想:    (1)设置一个栈S存放所经过的根结点(指针)信息;初始化S;   (2)第一次访问到根结点并不访问,而是入栈;    (3)中序遍历它的左子树,左子树遍历结束后,第二次遇到根结点,就将根结点(指针)退栈,并且访问根结点;然后中序遍历它的右子树。   (4) 当需要退栈时,如果栈为空则结束。           代码实现: void ...

Billy1900的博客 4万+

RN8209C单相电量计量芯片调试记录

芯片数据手册-简化版 调试功能是读取直流电池电压,出于这个需求,也就是要读取芯片的3路AD值,因为有效值是针对交流的,这点可以查看手册。 前提知道: 通信: 本次调试采用uart通信,rn8209c只有uart接口,采用9位数据(8位数据+偶校验),读寄存器只需要发送对应寄存器值就行,,波特率是4800,写的话需要保证最高为是1。没仔细读手册,这里吃了很大的亏。 复位: RN8209C支持两只复位方式,一种是发送复位命令复位,另一种是拉低复位引脚25ms以上,复位引脚复用它的串口接收(RX)口,所以拉低ST

wang 恒 的博客 6575

二叉树的先序,中序,后序遍历(非递归算法)

二叉树的先中后序遍历的非递归算法都和栈有关,栈的相关操作请点此查看。①先序遍历思路一:先将根结点进栈,当栈不为空时,出栈并访问,然后依次将右左结点进栈(栈先进后出,所以先进栈右结点)。顺序栈类型:typedef struct { Btnode *data[MaxSize]; int top; }Sqstack;思路一的实现:void PreOrder(Btnode *b) { Btnode ...

Gsdxiaohei 4843

第95节:多模型多卡推理管理

多模型推理:在同一硬件平台上同时部署多个不同或相同的深度学习模型,满足多任务需求。多卡推理:利用多块 GPU 资源,提升推理吞吐量与并发能力。目标:合理分配 GPU 资源,实现高效、低延迟的推理服务。

yumeiguo的博客 217

基于Python的IMF经济数据爬取与分析:从入门到实战

本文详细介绍了如何使用Python爬取国际货币基金组织(IMF)的经济数据,包括最新的爬虫技术、反反爬策略、数据解析与存储方法。文章从IMF数据源分析开始,逐步讲解如何构建一个完整的爬虫系统,并提供了详细的代码实现和优化建议。通过本文,读者将掌握爬取复杂国际组织数据的关键技术,并能将这些技术应用于其他类似的数据获取场景。关键词:Python爬虫、IMF数据、经济数据获取、数据清洗、反爬策略IMF Data (data.imf.org) - 主要数据门户。

2201_76125261的博客 1439

C++实现二叉树的先序、中序、后序遍历,包括递归方式和非递归 方式

C++实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式。 1. 二叉树的基本结构 struct Node { int value; Node* left; Node* right; Node(int value): value(value), left(nullptr), right(nullptr) {} }; 2. 递归和非递归方...

暮日落流年的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

#include "stdafx.h" #include using namespace std; const int MAXSIZE = 20; //定义栈空间大小为20 struct BTNode { char m_value; BTNode *m_left; BTNode *m_right; }; BTNode *stackArr[MAXSIZE] =

5224

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

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

二叉树的递归实现和非递归实现、递归序

明朗晨光的专栏 2459

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

利用栈实现二叉树的先序,中序,后序遍历的非递归操作 #include #include #include #include #include #include using namespace std; typedef struct BiTNode{ char data; BiTNode *lchild, *rchild; }BiTNode,*BiTree;

cxllyg的专栏 8万+

二叉树非递归先序、中序、后序遍历过程详解及C++详细实现

数据结构,二叉树非递归先序、中序、后序遍历过程详解及C++详细实现

weixin_45651616的博客 3057

Python 二叉树先序中序后序遍历 非递归

先序遍历二叉树非递归 类似递归的思想,遇到一个节点先打印出来,然后依次访问左右节点。但是非递归借助栈来实现有所不同,应该先打印当前节点,然后依次入栈右节点和左节点,因为此时栈的插入顺序和弹出顺序相反。 节点的结构: class TreeNode: def __init__(self, x): self.val = x se...

James_J的博客 2309

[Data Structure]使用非递归的方法对二叉树进行先序、中序、后续遍历

[Data Structure]使用非递归的方法对二叉树进行先序、中序、后续遍历 #include<bits/stdc++.h> using namespace std; typedef struct tree//构建一棵树的结点 { int data;//这里的data其实用来放编号了,结点里并没有存数据 tree *left;//指向子树的指针 tree *right; }tree; void LRD(tree* p,int n)//后序遍历函数 {

科幻小说 1274

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

二叉树的六种遍历方式(其中控制台输出代表访问) 1.递归先序 public void recursion_pre(TreeNode root) { if (root==null) return; System.out.print(root.val); recursion_pre(root.left); ...

dao_lian的博客 521

【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

二叉树遍历的非递归写法

liuwanqing233333的博客 3133
上一篇: 理解队列
下一篇: 二叉树后序非递归遍历
DreamCatcher
博客等级 码龄20年 23粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamCatcher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值