DFS深度优先搜索(前序、中序、后序遍历)非递归标准模板

深度优先和宽度优先的区别、前(先)序遍历和中序遍历以及后序遍历的使用 深度优先 深度优先搜索属于图算法的一种 深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 过程:是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次. 深度优先遍历 深度优先遍历图的方法是,从图中某顶点v出发: 从图中一个未访问的顶点V开始 沿着一条路一直走到底 第二步路走完过后,再从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…不断递归重复2和3过程 一直执行3过程,直到所有的顶点都遍历完成(即所以顶点 阅读详情

DFS深度优先搜索(前序、中序、后序遍历)非递归标准模板(JAVA)

本文展示了DFS深度优先搜索下,前中后序遍历模板;如果要使用前序遍历,可注释掉中后序遍历的输出代码;使用中序与后序遍历同理

TreeNode类
代码如下

public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int val){
        this.val = val;
    }
    public TreeNode(TreeNode left, int val, TreeNode right){
        this.val = val;
        this.left = left;
        this.right = right;
    }
    public String toString(){
        return String.valueOf(this.val);
    }
}

测试类

测试类使用到的树形

[1, 2, 3, 4, null, 5, 6]

代码

import java.util.LinkedList;
import java.util.Stack;

public class Test {
    public static void main(String[] args) {
        TreeNode root = new TreeNode(new TreeNode(new TreeNode(4), 2, null),
                        1,
                        new TreeNode(new TreeNode(5), 3, new TreeNode(6))
        );

        Stack<TreeNode> stack = new Stack<>();
        TreeNode cur = root;
        TreeNode pop = null;
        while(cur != null || !stack.isEmpty()){
            if(cur != null){
                stack.push(cur);
                System.out.println("前序遍历:"+ cur);
                cur = cur.left;
            }else{
                TreeNode peek = stack.peek();
                if(peek.right == null){
                    System.out.println("中序遍历:"+ peek);
                    pop = stack.pop();
                    System.out.println("后序遍历:"+ pop);
                }
                else if(peek.right == pop){
                    pop = stack.pop();
                    System.out.println("后序遍历:"+ pop);
                }
                else{
                    System.out.println("中序遍历:"+ peek);
                    cur = peek.right;
                }
            }
        }
    }
}

希望有所帮助!

Java教程:如何不使用递归实现文件夹的遍历? ​ 大家好,这篇文章为大家介绍一下怎样遍历电脑上的一个文件夹。​ 通常遍历文件夹我们都是使用递归进行操作,这种方式比较简单,也比较容易理解,本文的第一种实现也是使用递归。然后再为大家介绍另一种不使用递归的方式,只用到了循环和集合,这种方式由于没有使用递归,所以效率更高一些! 阅读详情

相关推荐

二叉树遍历深度解析:从DFS/BFS思想到网格路径搜索实战

深度优先搜索(DFS)和广度优先搜索(BFS)是计算机科学中遍历非线性数据结构的两种核心策略。DFS采用“一路到底再回溯”的探索方式,适合处理路径、子树相关问题;BFS则按层次推进,常用于寻找最短路径或按层处理节点。这两种策略构成了算法设计的基石,其价值在于提供了系统化访问节点的通用范式,可广泛应用于树、图的搜索、文件系统遍历及状态空间探索等场景。例如,在解决“网格一笔画”路径搜索问题时,DFS的回溯思想可直接用于寻找遍历所有格子的哈密顿路径;而若需求改为两点间最短连通,则BFS更为高效。掌握DFS与BFS

weixin_33728708的博客 470

0105深度优先搜索算法非递归2种实现对比-无向图-数据结构和算法(Java)

0105深度优先搜索算法非递归2种实现对比-无向图-数据结构和算法(Java)

gaogzhen的博客 1087

二叉树算法精讲:从基础遍历到DFS/BFS实战

二叉树是计算机科学中最基础的树形数据结构,其每个节点最多有两个子节点的特性,使其在搜索、排序等场景中具有O(log n)的高效性能。通过递归定义和链式存储结构,二叉树可以实现前序、中序、后序和层序遍历等核心操作。深度优先搜索(DFS)和广度优先搜索(BFS)是处理二叉树问题的两大核心技术,分别适用于路径探索和层级分析场景。在算法面试中,二叉树相关问题占比超过30%,涉及二叉搜索树验证、最近公共祖先等高频考点。代码随想录训练营通过系统化的三段式教学法,帮助开发者掌握二叉树问题的递归思维和迭代实现技巧,特别适合

weixin_34319817的博客 392

LeetCode | 深度优先搜索(递归和非递归)

文章目录简介深度有限搜索DFS1. 递归结构2. 非递归结构DFS非递归结构和BFS的区别 简介 ~~在学习广度优先搜索BFS之前,我觉得深度优先搜索DFS写起来非常简单:递归递归递归。 然而只有七秒钟记忆的我,在学习了广度优先搜索,最关键是学会了BFS的模板(python | 广度优先搜索模板)后,竟然忘了深度优先是怎么做的了~ 此篇博客做一个系统的不尽详细的总结~ 深度有限搜索DFS 1. 递归结构 什么是递归? 简单来说,就在一个函数中调用自己。 DFS算法实现最常用的就是递归,导致我之前一直不知道还

lovetaozibaby的博客 3093

PTA树遍历问题解析与C++实现技巧

树遍历是数据结构与算法中的核心概念,主要包括前序、中序、后序和层序遍历四种基本方式。其原理是通过递归或迭代方式系统地访问树中每个节点,在算法设计和程序优化中具有重要价值。树遍历技术广泛应用于编译器设计、数据库索引、文件系统管理等场景。针对PTA平台特性,实现时需特别注意递归边界条件处理、非递归算法优化以及严格的输出格式控制。通过掌握这些基础遍历方法及其变种,可以有效解决各类树结构相关问题,提升算法竞赛和编程考试的解题能力。

weixin_30650039的博客 506

二叉树核心原理与算法实践:从数据结构基础到面试高频考点

数据结构是计算机科学组织与管理数据的基石,其中树形结构因其清晰的层次关系,在文件系统、数据库索引等领域应用广泛。二叉树作为树结构的重要分支,其每个节点最多拥有两个子节点的特性,完美契合了计算机的二进制逻辑,使得递归、分治等核心算法思想得以直观体现。从原理层面看,二叉树的深度优先遍历(如前序、中序、后序)和广度优先遍历(层序)是理解递归调用栈与队列应用的经典场景,其衍生的二叉搜索树(BST)则通过排序约束实现了高效的数据查找。在工程实践中,二叉树不仅是理解更复杂结构(如堆、AVL树、红黑树)的关键,其遍历算法

anjichan4261的博客 371

算法基础必看:循环、递归、DFS 的区别与相互转换

本文聚焦 Java 开发与算法基础中高频混淆的三个概念:循环、递归与深度优先搜索(DFS)。文章从定义与本质出发,清晰梳理三者的区别与内在联系,并通过二叉树前序遍历、斐波那契数列、全排列等典型场景,给出可直接运行的 Java 代码实现,重点演示递归与非递归(手动栈 + 循环)的相互转换思路与通用模板,帮助读者在面试与刷题中快速掌握 DFS 的两种写法及递归转非递归的核心方法。

独断万古他化的博客 7725

408算法攻坚:从经典题目到实战技巧的深度解析

数据结构与算法是计算机科学的核心基础,其核心价值在于通过高效的数据组织与操作逻辑,解决复杂的计算问题。理解其原理,如递归、分治、动态规划等思想,是构建高性能软件系统的关键。在工程实践中,算法能力直接决定了程序的效率与可扩展性,广泛应用于搜索引擎、推荐系统、数据库索引等场景。本文聚焦于计算机考研408算法题的实战攻坚,通过剖析链表反转、快慢指针、二叉树遍历、滑动窗口、Dijkstra算法、快速排序、并查集等经典题目,深入讲解其设计逻辑、复杂度分析与手写代码规范,旨在帮助考生跨越从“看懂”到“在有限时间内做对”

weixin_30883311的博客 310

【数据结构】Leetcode——遍历树 经典题

深度优先遍历 前序遍历(递归法,迭代法) 中序遍历(递归法,迭代法) 后序遍历(递归法,迭代法) 广度优先遍历 层次遍历(迭代法) 「这里前中后,其实指的就是中间节点的遍历顺序」,只要大家记住 前中后序指的就是中间节点的位置就可以了。 看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式 前序遍历:中左右 中序遍历:左中右 后序遍历:左右中 前中后序遍历的逻辑其实都是可以借助栈使用非递归的方式来实现的。 而广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出

Bryce-HJ 1563

Java:递归方法实现DFS算法(附完整源码)

Java:递归方法实现DFS算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 753

后序遍历不只是递归那么简单:一位老程序员的DFS心得

本文深入探讨二叉树后序遍历的深层原理与实际应用。作者指出后序遍历(左→右→根)不仅是简单的递归问题,而是蕴含着重要的计算思维。文章首先介绍后序遍历的基本概念和递归实现,随后重点解析非递归的栈模拟实现(双栈法),揭示DFS的本质。更关键的是,作者列举了后序遍历在删除目录树、表达式求值、编译器AST等真实场景中的应用,强调其"先处理子问题再解决父问题"的思维模式。最后提出,深入理解遍历顺序的本质比掌握算法本身更重要,这种结构化思维能帮助开发者形成更清晰的问题分析能力。

Echo_Wish 149

遍历与搜索

一、二叉树的遍历 1.深度优先遍历DFT 在先L后R的前提下: 1)前序遍历V-L-R 2)中序遍历L-V-R(递增序列) 3)后续遍历L-R-V 前序遍历递归方式: vector<int> res; vector<int> PreOrderDFS(TreeNode* root) {//先序递归遍历 if(root==nullptr)//递归结束条件 return; res.push_back(root->val); //先访问当前根节点 PreOrd

qq_42752343的博客 571

[OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-下...

[OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-下 CT Image with Window presets This is an example of displaying a ct image along with buttons to set ww/wc pres...

浩秦的博客 1841

vector遍历_【数据结构】Leetcode——遍历树 经典题

迈出第一步,需要勇气Contents0 捋清概念1 层次遍历1. 1 二叉树的层次遍历(102)1.2 二叉树的层次遍历 II(107)1.3.二叉树的层平均值(637)1.4.找树左下角的值(513)2 前中后序遍历2.1 递归模板实现2.2 非递归实现二叉树的前序遍历(144)2.3 非递归实现二叉树的后序遍历(145)2.4 非递归实现二叉树的中序遍历(94)3 总结等等!开始之前...

weixin_40003512的博客 279

ANSYS MAXWELL内置式永磁同步电机(IPMSM)转矩最大时输入电流相位的确定

1.在转子转速为零时看一个周期内的转矩变化

qq_41752507的博客 6517

Anolis龙蜥内核升级实战:从查询到配置的全流程指南

本文提供了一份详尽的Anolis龙蜥操作系统内核升级实战指南。文章从升级的必要性出发,逐步讲解了升级前的系统检查与备份、从官方源获取正确内核包、分步安装与验证、配置默认启动项以及升级后的功能验证与安全回滚方案。旨在帮助运维人员安全、平稳地完成内核升级,以获取性能提升、新硬件支持及重要的安全漏洞修复。

qq_27496129的博客 572

深度优先搜索与广度优先搜索:算法核心思想、实现与应用场景全解析

图遍历是计算机科学中处理图与树结构数据的基础操作,其核心目标是系统地访问图中的所有节点。深度优先搜索(DFS)和广度优先搜索(BFS)是两种最根本的图遍历策略,它们通过不同的数据结构(栈与队列)实现了截然不同的探索哲学。DFS采用“一条路走到黑”的纵向深入策略,空间效率高,常用于寻找可行解、拓扑排序及连通分量分析;BFS则采用“层层推进”的横向扩展策略,能保证在无权图中首次找到的路径即为最短路径,因此是求解最短路径、层次遍历和扩散类问题的首选。理解这两种搜索策略的底层原理与适用场景,是掌握更复杂算法(如动态

weixin_33913332的博客 305

ansys命令流力磁耦合仿真

文章目录前言一、力磁耦合仿真流程二、静力学仿真三、力磁耦合模型构建四、静磁学仿真总结 前言 一、力磁耦合仿真流程 力磁耦合有限元仿真流程中,首先进行静力学仿真,经过前处理模块、分析计算模块和后处理模块提取三维模型单元应力,然后根据力磁耦合方程中,通过matlab将单元应力导入到磁导率与应力的关系式中,得到单元的相对磁导率。最后采用载荷传递耦合方式,进行静磁学模拟仿真,分析计算得到该载荷下试件的磁场分布。,如下图所示为力磁耦合仿真流程图: 二、静力学仿真 下图为中心预制条形缺陷的Q235钢板试..

wsfwsf128的博客 2662

C++栈实现二叉树中序遍历:从递归到非递归的算法精解

在数据结构与算法领域,栈(Stack)作为一种后进先出(LIFO)的线性数据结构,是理解程序执行流程和实现深度优先搜索(DFS)的关键基础。其核心原理在于通过压栈(push)和弹栈(pop)操作来管理待处理的任务序列,这种特性使其成为模拟递归调用、手动控制程序状态的强大工具。在技术价值上,掌握栈的非递归应用能有效避免递归可能引发的栈溢出风险,并提供更精细的流程控制能力,这对于处理超深数据结构或在遍历中嵌入复杂业务逻辑至关重要。一个经典的应用场景便是二叉树的遍历,尤其是中序遍历(左-根-右)。通过使用栈来显式

anjueci1221的博客 313

MS建模mmt

一、流程:1.定义好每个原子力场类型:Edit Sets(分组) 2.加H(一般是仅与Al-O八面体中的Al相连的O原子)、给H分组 3.“make P1”、校核化学式(正确与否) 4.扩成超晶胞(Na-mmt:4*1*1,Ca-mmt:4*2*1,illite:2*1*1,由化学式而定) 5.置换阳离子: mmt:模型中每 32 个 Si 4+有 1 个被 Al 3+ 取...

weixin_30721899的博客 2174

Unity卡通渲染实战:原神PMX模型Blender转FBX全流程

卡通渲染是二次元游戏开发的核心技术之一,其本质在于对光照模型、顶点色控制与边缘光生成的精准建模。本文从基础概念切入,解析MMD PMX格式的数据结构原理,阐明顶点色(Vertex Color)与Toon Ramp贴图在风格化渲染中的技术价值;进而覆盖Blender到Unity的跨引擎资产流转关键路径,重点解决法线校准、骨骼命名适配、FBX导出参数配置等工业级断点问题;最终落地于Unity内置管线与URP双环境下的卡通Shader定制与Render Feature实现。内容聚焦原神风格角色资产重铸实践,涵盖P

weixin_38166557的博客 438

C++模板树:泛型编程实现通用树形数据结构框架

树形数据结构是计算机科学中处理层次关系数据的核心概念,广泛应用于文件系统、组织架构、数据库索引等场景。其原理基于节点与边的连接关系,通过递归或迭代算法实现数据的组织与访问。在C++工程实践中,利用模板技术实现通用树结构框架,能够显著提升代码复用性和类型安全性。通过泛型编程,开发者可以构建与数据类型无关的树容器,支持深度优先搜索、迭代器遍历等高级功能,同时结合智能指针管理内存生命周期,避免资源泄漏。这种设计模式特别适用于需要灵活数据结构的场景,如表达式树求值、目录树模拟等,体现了C++模板元编程与数据结构设计

weixin_34068198的博客 425

SAP PFCG 中的单一角色与复合角色

在 SAP 系统的安全与授权管理中,事务码 PFCG(角色维护)扮演着关键角色。理解单一角色(Single Role)和复合角色(Composite Role)的概念,对于有效地管理用户权限至关重要。

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

重邮802数据结构考研:手撕代码从零到实战,附C语言核心算法实现

数据结构是计算机科学的核心基础,它研究数据的组织、存储和操作方式,其核心原理在于通过特定的逻辑结构(如线性表、树、图)和物理结构来高效管理数据。掌握数据结构与算法,对于提升程序性能、解决复杂工程问题具有至关重要的技术价值,广泛应用于搜索引擎、数据库系统、编译器设计等场景。本文聚焦考研实战,深入剖析线性表、栈、队列、树、图等关键数据结构的典型算法实现,并提供完整的C语言代码模板与常见错误分析,旨在帮助考生系统性地提升“手撕代码”能力,从容应对重邮802数据结构考研中的代码题挑战。

weixin_30216561的博客 364

手把手教你学 Simulink (1.3)--Simulink 的模块库及其模块介绍

Simulink 提供了丰富的模块库,涵盖了从基本的信号生成和处理到复杂的数学运算和系统建模的各种功能。通过熟悉这些模块库及其模块,你可以更高效地构建和仿真动态系统。

MHD0815的博客 5151

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

计算机科学期末试卷深度解析:从数据结构到操作系统的核心考点与备考策略

计算机科学(CS)的核心课程,如数据结构、算法、操作系统和计算机组成原理,构成了软件开发和系统设计的理论基础。理解这些基础概念的工作原理,例如二叉树遍历的状态机模型和生产者-消费者问题中的信号量同步机制,是掌握复杂系统设计的关键。这些原理的技术价值在于,它们提供了解决实际工程问题的通用框架和高效工具,广泛应用于数据库索引、缓存系统、并发编程和硬件优化等场景。本文以一份典型的CS期末试卷为切入点,通过逆向工程的方式,深入拆解了其中涉及的算法非递归实现、进程同步等高频考点,并结合二叉树遍历和生产者-消费者问题等

weixin_33851429的博客 422

Devexpress16.2.6破解工具

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

上一篇: Unity3D的下载与安装
下一篇: Unity3D场景界面闪烁
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值