package com.company;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
/**
* 前序便利递归
* @param treeNode
* @param result
*/
public static void before(TreeNode treeNode, List<Integer> result) {
if(treeNode == null) {
return;
}
result.add(treeNode.val);
before(treeNode.left, result);
before(treeNode.right, result);
}
/**
* 谦虚遍历非递归
* @param treeNode
* @param result
*/
public static void beforeNoIte(TreeNode treeNode, List<Integer> result) {
Stack<TreeNode> stack = new Stack<>();
stack.push(treeNode);
while (!stack.isEmpty()) {
TreeNode tempNode = stack.pop();
result.add(tempNode.val);
if(tempNode.right != null) {
stack.push(tempNode.right);
}
if(tempNode.left != null) {
stack.push(tempNode.left);
}
}
}
/**
* 后序遍历
* @param treeNode
* @param result
*/
public static void after(TreeNode treeNode, List<Integer> result){
if(treeNode == null) {
return;
}
after(treeNode.left, result);
after(treeNode.right, result);
result.add(treeNode.val);
}
/**
* 后序遍历非递归
* @param treeNode
* @param s2
*/
public static void afterNoIte(TreeNode treeNode, List<Integer> s2){
Stack<TreeNode> s1 = new Stack<>();
Stack<TreeNode> result = new Stack<>();
s1.push(treeNode);
while (!s1.isEmpty()) {
TreeNode temp = s1.pop();
result.push(temp);
if(temp.left != null) {
s1.push(temp.left);
}
if(temp.right != null) {
s1.push(temp.right);
}
}
while (!result.isEmpty()) {
s2.add(result.pop().val);
}
}
/**
* 中序遍历递归
* @param treeNode
* @param result
*/
public static void middle(TreeNode treeNode, List<Integer> result) {
if(treeNode == null) {
return;
}
middle(treeNode.left, result);
result.add(treeNode.val);
middle(treeNode.right, result);
}
/**
* 中序遍历非递归
* @param treeNode
* @param result
*/
public static void middleNoIte(TreeNode treeNode, List<Integer> result) {
Stack<TreeNode> stack = new Stack<>();
TreeNode head = treeNode;
while (head != null) {
stack.push(head);
head = head.left;
}
while (!stack.isEmpty()) {
TreeNode temp = stack.pop();
result.add(temp.val);
if (temp.right != null) {
TreeNode next = temp.right;
while (next != null) {
stack.push(next);
next = next.left;
}
}
}
}
public static void main(String[] args) {
TreeNode t1 = new TreeNode(1, null, null);
TreeNode t2 = new TreeNode(2, null, null);
TreeNode t3 = new TreeNode(3, t1, t2);
TreeNode t4 = new TreeNode(4, null, null);
TreeNode t5 = new TreeNode(5, null, null);
TreeNode t6 = new TreeNode(6, t4, t5);
TreeNode root = new TreeNode(7, t3, t6);
List<Integer> result = new ArrayList<>();
middleNoIte(root, result);
for (int num: result) {
System.out.print(num);
}
}
}
相关推荐
Python Selenium自动化浏览器实战:从环境搭建到高级技巧
浏览器自动化是现代软件开发与数据处理中的关键技术,它通过程序模拟用户操作,实现网页交互的自动化执行。其核心原理是基于WebDriver协议,通过驱动程序与浏览器进行通信,从而控制浏览器的各种行为。这项技术的价值在于能够将重复性高、耗时长的Web操作转化为可编程、可复用的脚本,极大提升工作效率和准确性。在应用场景上,它广泛覆盖了Web自动化测试、数据采集与爬虫、日常办公流程自动化以及RPA(机器人流程自动化)等多个领域。本文聚焦于Python环境下Selenium这一经典工具,深入讲解其环境配置、八大元素定位
【Java数据结构】二叉树的前中后序遍历(递归和非递归)
*这段代码还有一个问题 我们外层的循环条件是cur!=null 但是我们在cur获取到D的右子节点时 此时cur又为空了 此时循环条件不满足 循环就结束了 但是我们还没有遍历完这棵二叉树 我们还有什么依据来继续循环呢?我们不采用递归的方式 但是要模拟递归的思路。**递归实现的代码都十分相似 **例如这颗树 我们用它举例。前序遍历的遍历方式是。
Materials Studio多层聚合物建模全流程:从Build Layers到LAMMPS data文件导出避坑指南
本文详细解析了使用Materials Studio构建多层聚合物模型并导出为LAMMPS data文件的全流程。重点剖析了Build Layers工具的核心逻辑、真空层处理技巧,并提供了解决导出过程中Z轴坐标偏移问题的实战方案,特别是如何利用msi2lmp工具的-shift参数进行精准校正,确保模型在LAMMPS中模拟的稳定性和准确性。
二叉树的遍历详解(前序中序后序层次-递归和非递归)
二叉树二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点前序遍历前序遍历按照“根结点
告别单一查询!MultiQueryRetriever在LangChain中的高级用法解析
本文深入解析了LangChain中的MultiQueryRetriever高级用法,该工具通过大语言模型自动生成多样化查询,显著提升文档检索的召回率和准确性。文章详细介绍了其核心机制、高级配置调优策略以及在多语言和专业领域中的实际应用,为开发者提供了优化知识库问答系统的实用方案。
单波束与多波束声呐:从原理到应用场景的全面解析
本文全面解析了单波束与多波束声呐的工作原理、核心特点及应用场景。单波束声呐如精准的狙击手,适合高精度需求;多波束声呐则像高效的散弹枪,适用于快速测绘和大面积覆盖。文章还提供了选型指南和前沿发展趋势,帮助用户根据预算和需求选择最适合的声呐技术。
二叉树的遍历规律
二叉树的非递归遍历遵循以下套路:1.确定二叉树的遍历方式,根据方式确定curr的维护规律,此代表的是节点入栈的规律;2.寻找节点出栈的时机,节点出栈代表要处理节点;3.出栈一次节点,维护下一次的curr。
ATM火控电容改造实战:提升速凌无刷电机动力与系统稳定性
在嵌入式系统与电机驱动领域,电源完整性是保障电路稳定运行的核心基础。其核心原理在于通过合理的电容网络设计,为负载提供瞬时大电流并滤除高频噪声,从而维持电压稳定。这项技术的核心价值在于能显著提升系统的动态响应能力与可靠性,避免因电压跌落导致微控制器复位或功率器件过应力。典型的应用场景包括无人机电调、机器人关节驱动以及各类需要快速响应的伺服系统。本文聚焦于水弹发射器ATM火控系统的硬件迭代,通过详解电容的选型、布局与焊接流程,特别是针对速凌五代无刷电机的高启动电流特性,系统性地阐述了如何通过强化电源储能与芯片去
二叉树的前、中、后序遍历(递归与非递归)
二叉树的遍历 常见的二叉树的遍历有三种方式:前序遍历(根节点,左子树,右子树) 中序遍历(左子树,根节点,右子树) 后序遍历(左子树,右子树,根节点) 每种方式都可以用递归和非递归来实现 ...
工程经验分享:PCIE(1)
本文介绍AXI Bridge For Pcie Express Gen3 Subsystem 的使用方法。这个IP兼具简单与实用性,将PCIE协议层实现于内部,仅留出AXI接口供开发者使用。开发者不需要处理复杂的PCIE协议数据,只需要对AXI总线有所了解即可,十分符合Xilinx一贯的开发风格。本文无关PCIE协议本身,仅分享实用性的工程经验,以PCIE IP为核心,一步一步搭建一个简单的子系统,以此说明用法。文中所有内容均已通过项目检验。
K8S搭建(centos)完整版
每个人都有惰性,但不断学习是好好生活的根本,共勉!
java 中序非递归遍历
// 中序遍历 非递归算法 public static void InOrder2(TreeNode root) { if(root==null) return; Stack<TreeNode> stk = new Stack<TreeNode>(); TreeNode p = root;//辅助节点 stk.add(p); while(stk.isEmpty() == false) { //只要你有左孩子,就将左孩子压入栈中 i.
SAP 行业扫盲系列之一:SAP 从业者的分类
本文简单介绍了 SAP 从业者的分类,限于笔者狭隘的视角,可能存在遗漏或者不恰当的地方,希望大家在评论区指出。 那些在知乎咨询上向我提问关于进入 SAP 行业建议的朋友们,也请大家提问时注明自己想具体从事 SAP 行业哪一类的工作,这样才能得到更让你们满意的回复。感谢阅读。
leetcode刷题之 树(18)-前中后序遍历: 非递归实现二叉树的前序遍历
前中后序遍历 1 / \ 2 3 / \ \ 4 5 6 层次遍历顺序:[1 2 3 4 5 6] 前序遍历顺序:[1 2 4 5 3 6] 中序遍历顺序:[4 2 5 1 3 6] 后序遍历顺序:[4 5 2 6 3 1] 层次遍历使用 BFS 实现,利用的就是 BFS 一层一层遍历的特性;而前序、中序、后序遍历利用了 DFS 实现。 前序、中序...
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
LeetCode题94,44,145,二叉树的前中后序遍历,非递归
注意:解题都要用到栈。
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
leetcode :二叉树的前中后序遍历非递归实现,以及根据前中后序构造二叉树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ clas
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
【leetcode】二叉树前、中、后序遍历的非递归实现
前序遍历 class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); if(root == null) return res; TreeNode node = root; Stack<TreeNode> stack = new
leetcode刷题之 树(19)-前中后序遍历: 非递归实现二叉树的后序遍历
[LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历 栈 正常前序加入, collections.reverse() Given a binary tree, return thepostordertraversal of its nodes' values. For example: Given binary tree{1,#,2,3...
leetcode.144、94、145 二叉树前、中、后序的非递归遍历 C++解法
非递归前序遍历 非递归中序遍历 非递归后序遍历
[Leetcode]144, 94, 145二叉树前中后序遍历的非递归实现
144. Binary Tree Preorder Traversal Description: Given a binary tree, return the preorder traversal of its nodes’ values. For example: Given binary tree [1,null,2,3], 1 \ 2 / ...
leetcode刷题之 树(20)-前中后序遍历:非递归实现二叉树的中序遍历
[LeetCode] Binary Tree Inorder Traversal 二叉树的中序遍历 Given a binary tree, return theinordertraversal of its nodes' values. Example: Input: [1,null,2,3] 1 \ 2 / 3 Output: [1,3...
Leetcode打卡6:求给定的二叉树的(前中)后序遍历——非递归写法
题目: 求给定的二叉树的后序遍历。 例如: 给定的二叉树为{1,#,2,3}, 1↵ ↵ 2↵ /↵ 3↵ 返回[3,2,1]. 备注;用递归来解这道题太没有新意了,可以给出迭代的解法么? 本文提供了二叉树先序,中序,后序的迭代实现! 下图为前序和中序的遍历压栈图: 先序遍历:根左右 1.无论是哪种遍历方式,用迭代实现都是用栈去做的,所以我们对栈的先入后出的顺序要很清楚。...
树、二叉树的前中后层序遍历(递归、非递归Java实现)
文章目录1. 二叉树的前中后序遍历(递归,非递归)以及层序遍历1.1 二叉树前中后遍历的递归解法1.2 二叉树前中后遍历的非递归解法1.2.1 非递归的前序遍历:(LeetCode 144)1.2.2 非递归的中序遍历:(LeetCode 94)1.2.3 非递归的后序遍历:(LeetCode 145)1.3 层序遍历:(LeetCode 102、103、107)2 树的前中后层序遍历2.1 前序...
Java数据结构二叉树前中后序遍历非递归实现(LeetCode)
文章目录一、前序遍历1.题目描述2.输入输出示例3.解题思路4.代码实现二、中序遍历1.题目描述2.输入输出示例3.解题思路4.代码实现三、后序遍历1.题目描述2.输入输出示例3.解题思路4.代码实现 一、前序遍历 1.题目描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 2.输入输出示例 示例 1: 输入:root = [1,null,2,3] 输出:[1,2,3] 示例2: 输入:root = [] 输出:[] 示例 3: 输入:root = [1] 输出:[1] 3.解题思路..
leetCode 226.翻转二叉树 递归 + 非递归 + 前中后序 + 层序遍历 【深度和广度优先遍历】
leetCode 226.翻转二叉树-优快云博客。
二叉树前/中/后序遍历非递归实现(用栈实现)LeetCode Binary Tree Traversal
在数据结构中,二叉树是常用的一种数据结构,而对二叉树进行遍历也是这种很常用的操作,遍历二叉树是我们可以使用递归的方法,代码很简单,但是每次调用递归函数都会都系统消耗比较大,下面介绍一下用栈的方法实现二叉树的遍历,例子为LeetCode里面的题目。 首先是LeetCode中已经定义好的二叉树结点 /** * Definition for binary tree * struct TreeNo
445



被折叠的 条评论
为什么被折叠?



