import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Tree {
class TreeNode {
public TreeNode left;
public TreeNode right;
public int value;
public TreeNode(int v) {
value = v;
left = null;
right = null;
}
}
private void preOrder(TreeNode root) {
if (root == null) return;
System.out.print(root.value + " ");
preOrder(root.left);
preOrder(root.right);
}
private void preOrderLoop(TreeNode root) {
if (root == null) return;
Stack<TreeNode> help = new Stack<TreeNode>();
help.add(root);
TreeNode current;
while (!help.isEmpty()) {
current = help.pop();
System.out.print(current.value + " ");
if (current.right != null) help.add(current.right);
if (current.left != null) help.add(current.left);
}
}
private void inOrder(TreeNode root) {
if (root == null) return;
inOrder(root.left);
System.out.print(root.value + " ");
inOrder(root.right);
}
private void inOrderLoop(TreeNode root) {
if (root == null) return;
Stack<TreeNode> help = new Stack<TreeNode>();
TreeNode current = root;
while (!help.isEmpty() || current != null) {
while (current != null) {
help.add(current);
current = current.left;
}
current = help.pop();
System.out.print(current.value + " ");
current = current.right;
}
}
private void postOrder(TreeNode root) {
if (root == null) return;
postOrder(root.left);
postOrder(root.right);
System.out.print(root.value + " ");
}
private void postOrderLoop(TreeNode root) {
if (root == null) return;
Stack<TreeNode> help = new Stack<TreeNode>();
Stack<TreeNode> result = new Stack<TreeNode>();
help.add(root);
TreeNode current;
while (!help.isEmpty()) {
current = help.pop();
result.add(current);
if (current.left != null) help.add(current.left);
if (current.right != null) help.add(current.right);
}
while (!result.isEmpty()) {
System.out.print(result.pop().value + " ");
}
}
private void levelOrderLoop(TreeNode root) {
if (root == null) return;
Queue<TreeNode> help = new LinkedList<TreeNode>();
help.add(root);
TreeNode current;
while (!help.isEmpty()) {
current = help.poll();
System.out.print(current.value + " ");
if (current.left != null) help.add(current.left);
if (current.right != null) help.add(current.right);
}
}
public void test() {
TreeNode root = new TreeNode(1);
TreeNode node1 = new TreeNode(2);
TreeNode node2 = new TreeNode(3);
TreeNode node3 = new TreeNode(4);
TreeNode node4 = new TreeNode(5);
TreeNode node5 = new TreeNode(6);
root.left = node3;
node3.left = node2;
node3.right = node4;
root.right = node1;
node1.right = node5;
System.out.print("preOrder: ");
preOrder(root);
System.out.println();
System.out.print("preOrderLoop: ");
preOrderLoop(root);
System.out.println();
System.out.print("inOrder: ");
inOrder(root);
System.out.println();
System.out.print("inOrderLoop: ");
inOrderLoop(root);
System.out.println();
System.out.print("postOrder: ");
postOrder(root);
System.out.println();
System.out.print("postOrderLoop: ");
postOrderLoop(root);
System.out.println();
System.out.print("levelOrderLoop: ");
levelOrderLoop(root);
System.out.println();
}
}
相关推荐
Win10插网线显示未识别网络的三种解决方法
本文介绍了三种解决Win10插网线显示未识别网络问题的方法:更新或重启网络设备驱动程序、重置Winsock目录、启用Network Setup Service服务。这些方法都是基于常见的网络问题和解决方案而设计的,适用于大多数Win10用户。如果你遇到了这一问题,可以按照上述步骤进行操作,相信一定能够找到解决问题的方法。需要注意的是,在进行任何操作之前,请务必备份重要数据以防万一。此外,如果你对计算机硬件或软件不熟悉,建议寻求专业人士的帮助以避免造成不必要的损失。
Java二叉树三序遍历的非递归实现
Java二叉树三序遍历的非递归实现
告别仿真失败!用Sigrity 2022 SystemSI搞定DDR4信号质量仿真的保姆级流程
本文详细介绍了如何使用Sigrity 2022 SystemSI工具进行DDR4信号完整性仿真,提供了一套避免仿真失败、提高仿真精度和加速仿真流程的保姆级方法。从模型验证、设计数据预处理到拓扑构建和参数提取,再到高级调试技巧和仿真加速方案,帮助硬件工程师系统性地解决DDR4信号质量仿真中的常见问题。
java实现二叉树的遍历(递归和非递归)
现有一颗如下图所示的二叉树: 其遍历的各种方式如下: 构造一颗如下图所示的二叉树,用java实现其前序,中序,后序遍历 注意二叉树节点的定义如下: public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val =...
FDTD材料nk值拟合优化指南:利用材料资源管理器提升光学模型精度
本文详细介绍了如何利用FDTD仿真软件中的材料资源管理器,对材料nk值进行精确拟合与优化,从而提升光学模型的仿真精度。文章通过实战案例,解析了拟合参数调整、报告解读以及针对varFDTD求解器的特殊注意事项,帮助用户从根本上解决仿真结果不准的常见问题。
SAP COPA实战:手把手教你用CMOD增强搞定自定义特性派生(以客户字段为例)
本文详细介绍了在SAP COPA模块中通过CMOD增强实现自定义特性派生的全流程,以客户字段为例,展示了从特性设计、SPRO配置到特性派生逻辑实现的完整步骤。重点讲解了如何利用CMOD增强技术解决业务需求,提升获利能力段分析的灵活性和准确性。
java实现二叉树树的非递归遍历
二叉树递归 参考:java使用递归,非递归方式实现二叉树的三种常见遍历方式 代码实现 Node类 public class Node { int data; Node leftChild = null; Node rightChild = null; public Node(int data) { this.data = data; }...
JavaFX - 动画
JavaFX 动画
树、二叉树的前中后层序遍历(递归、非递归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 前序...
使用 Wireshark 进行计算机网络协议分析
文章目录实验前准备一、Wireshark抓包示例二、Wireshark实作1、数据链路层实作一 熟悉Ethernet帧结构实作二 了解子网内/外通信时的 MAC 地址实作三 掌握 ARP 解析过程2、网络层实作一 熟悉 IP 包结构实作二 IP 包的分段与重组实作三 考察 TTL 事件3、传输层实作一 熟悉 TCP 和 UDP 段结构实作二 分析 TCP 建立和释放连接4、应用层实作一 了解 DNS 解析实作二 了解 HTTP 的请求和应答 实验前准备 本部分实验用到的是抓包和协议分析软件——Wiresha
控制算法研发工程师(博士)职位深度解析与面试指南
摘要:广东万和新电气股份有限公司招聘控制算法研发工程师(博士),工作地点佛山顺德。职位要求2026届博士学历,电子信息工程或控制科学与工程专业。主要职责包括:1)燃气热水、热泵等系统的电控软件设计与优化;2)开发PID、模糊控制、ADRC、MPC等智能算法,应用于恒温控制、变频调节等场景。重点考察算法研发能力、系统稳定性优化及嵌入式实现经验。该职位提供三年资深工程师培养计划,需具备扎实的控制理论基础和工程实践能力,能够处理非线性系统、多工况自适应等复杂控制问题。
先中后序遍历二叉树(递归、非递归)(Java)
思路: 递归、非递归两种方式,递归、非递归遍历二叉树 代码: package com.my.test.datastructure.tree; import java.util.Stack; /** * 先中后序遍历二叉树(递归、非递归) */ public class BinaryTreeVisit { static class Node { int...
YOLO11涨点优化:Loss魔改 | WIoU (Wise-IoU) v3版本全面替换,基于动态非单调聚焦机制,让模型更聪明地学习
YOLOv11目标检测中的WIoU v3损失函数改进 本文探讨了YOLOv11目标检测模型中CIoU损失函数的局限性,并提出了WIoU v3改进方案。关键发现包括: CIoU的缺陷:在低质量样本(小目标/遮挡目标)上过度惩罚,导致模型优化方向偏离,小目标AP往往比大目标低30%左右。 WIoU v3的创新: 动态非单调聚焦机制:根据样本"离群度"智能分配梯度 让模型重点优化中等质量样本,减少对低质量样本的无效关注 采用指数移动平均来自适应调整质量评判标准 实际效果:WIoU v3在保持大
非递归遍历二叉树 Java
非递归实现二叉树的前序遍历 ```public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ret = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); stack....
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
二叉树非递归遍历算法 java_java二叉树的非递归遍历
二叉树的递归遍历比较简单,这里就不聊了。今天主要聊聊二叉树的非递归遍历,主要借助于“栈”后进先出的特性来保存节点的顺序,先序遍历和中序遍历相对来说比较简单,重点理解后序遍历。1. 先看看节点类型://二叉树的节点类型private class Node{int data; //节点值Node leftChild; //左孩子Node rightChild; //右孩子public Node(int...
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
二叉树的非递归遍历(Java实现)
首先先将头节点入栈。之后不断判断栈中是否为空,不为空就将栈顶元素弹出,打印节点的值。然后将弹出节点的右节点先入栈,左节点后入栈。(注意不为空时才入栈)
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
Java 二叉树前序遍历(递归/非递归)
Java 二叉树前序遍历(递归/非递归)
java树的非递归遍历_java二叉树的非递归遍历
二叉树的递归遍历比较简单,这里就不聊了。今天主要聊聊二叉树的非递归遍历,主要借助于“栈”后进先出的特性来保存节点的顺序,先序遍历和中序遍历相对来说比较简单,重点理解后序遍历。1. 先看看节点类型://二叉树的节点类型private class node{int data; //节点值node leftchild; //左孩子node rightchild; //右孩子public node(int...
Java递归、非递归实现二叉树遍历
最近找工作做笔试题发现很重要,就自己写了一点,和大家分享 import java.util.Stack;import java.util.HashMap;public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTre
java 二叉树,非递归遍历
绝大多数可以用递归解决的问题,其实都可以用另一种数据结构来解决,这种数据结构就是栈。 因为递归和栈都有回溯的特性。 如何借助栈来实现二叉树的非递归遍历呢?下面以二叉树的前序遍历为例,看一看具体过程。 1.首先遍历二叉树的根节点1,放入栈中。 2.遍历根节点1的左孩子节点2,放入栈中 3.遍历节点2的左孩子节点4,放入栈中。 4.节点4既没有左孩子,也没有右孩子,我们需要回溯到上一个节点2。可是现在并不是做递归操作,怎么回溯呢? 别担心,栈已经存储
Java 二叉树非递归遍历核心实现
非递归遍历的核心是,通过手动维护栈来替代系统栈,实现前序、中序和后序遍历。
Java实现二叉树的三种非递归遍历
Java 实现二叉树的三种非递归遍历1.思路 其实思路就是递归的思路,无非就是加入了栈这个数据结构。 具体来看代码吧,个人觉得还算简洁。 2.实现首先是结点数据结构的设置:/** * @author WK */ public class SearchBinaryTree { //存放的结点标志 public String tag = ""; //是否被便利的标
java 二叉树的遍历 递归非递归
二叉树遍历首先弄清遍历流程。 中序遍历:第一次经过从它找左,第二次经过找右,第三次经过回来。第二次经过访问它。 算法实现: 第二次访问是 pop(&S,&p);Visit(p->data);因为中序遍历跟第三次经过没关系。所以第二次就弹出栈了。 Java版的程序如下: [java] view plain copy package
java二叉树创建层序创建,遍历(递归,非递归版)
使用队列工具 进行二叉树层序创建 后再补充二叉树先序创建,和 二叉树后序非递归遍历 有问题的,或者有更好的实现方式,欢迎指正!!! class TNode<E>; //结点信息 createBiTree(char[] array); //层序创建二叉树 GetHeight(TNode BT); //求树高 boolean isEmpty(TNode root); //二叉判空...
小白的二叉树非递归遍历(java)
如果要用非递归的手法,我们要用到栈的相关知识,我们使用一个栈来保存节点,从根节点root开始将剩下节点以先右后左的顺序依次入栈,并进入循环,直到节点为null时说明该子树(左,右)已经遍历完毕。弹出栈顶节点 node并输出,如果 node 的右子节点不为空,则将右子节点入栈,如果 node 的左子节点不为空,则将左子节点入栈。先将根节点入第一个栈,然后不断地将节点弹出并压入第二个栈,同时将左右子节点依次入栈,最后将第二个栈中的节点依次弹出,就是后序遍历。以下将由前序开始发表我的思考。
二叉树遍历的非递归Java实现
二叉树遍历的非递归Java实现
6770



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



