二叉树的中序遍历、递归实现、非递归实现、层次遍历、二叉树的应用,来来来,都有都有

二叉树的非递归遍历和层次遍历详解 二叉树非递归遍历非递归的后序遍历二叉树 //非递归的后续遍历二叉树 void HXprint(Tree *tree){ Stack s = initStack(); //初始化一个下面使用的栈 treeNode *p = tree; //新建一个遍历指针 treeNode *r=NULL; //辅助变量 cout<<"-------"<<endl; while(p||!isEmpty(s)){ //当遍历变量和栈同时为空时 表示遍历完成 阅读详情
/* you only have to complete the function given below.  
Node is defined as  

class Node {
    int data;
    Node left;
    Node right;
}
*/


//递归实现中序遍历

void inOrder(Node root) {
    if(root == null){
        return ;
    }else{
        inOrder(root.left);
        System.out.print(root.data+" ");
        inOrder(root.right);
    }
}

//非递归实现中序遍历

/*
current表示当前节点,并且指向栈顶,初始时指向root,root进栈
1.只要栈current有左孩子,左孩子进栈
2.否则,输出当前栈顶元素并且判断,当前栈顶元素是否有右孩子?
3.如果没有右孩子,弹出栈顶元素,直到找到有右孩子的节点,并且将该节点=current,进栈
只要栈不为空,重复1、2、3

*/

void inOrder(Node root) {
    if(root == null){
        return;
    }
    Node current = root;
    Stack<Node> stack = new Stack<Node>();
    stack.push(current);
    while(!stack.isEmpty()){
        //有左孩子,左孩子进站
        while(current.left != null){
            current = current.left;
            stack.push(current);
        }
        //弹出栈顶元素,直到找到右孩子
        while(current.right == null){
            if(!stack.isEmpty()){
                //pop的时候要再次检测栈是否为空
                current = stack.pop();
                System.out.print(current.data+" ");
            }else{
                return;
            }
        }
        current = current.right;
        stack.push(current);
    }
}


//层次遍历二叉树,利用队列暂存节点
/*只要队列不为空,就扫描队列,取出节点值并输出,只要该节点存在左孩子或者右孩子,就将其孩子进队*/
   void LevelOrder(Node root)
    {
       Queue<Node> queue = new LinkedList<Node>();
       queue.add(root);
       while(!queue.isEmpty()){
           Node node = queue.poll();
           System.out.print(node.data+" ");
           if(node.left != null){
               queue.add(node.left);
           }
           if(node.right != null){
               queue.add(node.right);
           }
       }

    }

//二叉树的应用之————输出树的最高高度值
//递归实现:输出左子树和右子树中高度最高者
   int longest(Node root){
       if(root ==  null){
           return 0;
       }else{
           return  Math.max((longest(root.left)+1),(longest(root.right)+1));
       }
   }
   int height(Node root)
    {
       //减去1,只是表示除去root那一层
       return longest(root)-1;
    }


//二叉树的应用之————从左到右,从上到下,只输出左子树的最左边的分支和右子树//的最右边的分支
void left_view(Node root){
    if(root == null){
        return ;
    }
    left_view(root.left);
    System.out.print(root.data+" ");
}
void right_view(Node root){
    if(root == null){
        return;
    }
    System.out.print(root.data+" ");
    right_view(root.right);
}
void top_view(Node root){
    left_view(root.left);
    System.out.print(root.data+" ");
    right_view(root.right);

}

//再附加一个二叉树的创建吧——输入一个前序序列,然后用递归创建,和前序遍历类似
//这里是摘录网上的代码,但只要我们理解思想就好了
     public void createBiTree(){
            Scanner scn = null;

            try {
              scn = new Scanner(new File("input.txt"));
            } catch (FileNotFoundException e) {
              e.printStackTrace();
            }

            this.root = createBiTree(root, scn);
          }
          private Node<T> createBiTree(Node<T> node, Scanner scn) {

            String temp = scn.next();
            if(temp.trim().equals("#")){
              return null;
            }
            else{
              node = new Node<T>((T)temp);
              node.setLeft(createBiTree(node.getLeft(), scn));
              node.setRight(createBiTree(node.getRight(), scn));
              return node;
            }
          }
遍历二叉树的各种操作(非递归遍历) 先使用先序的方法建立一棵二叉树,然后分别使用递归与非递归的方法实现前序、中序、后序遍历二叉树,并使用了两种方法来进行层次遍历二叉树,一种方法就是使用STL中的queue,另外一种方法就是定义了一个数组队列,分别使用了front和rear两个数组的下标来表示入队与出队,还有两个操作就是求二叉树的深度、结点数。。。 #include #include #include using namespace 阅读详情

相关推荐

LeetCode 二叉树的中序遍历(递归和非递归算法)

给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 思路分析:二叉树的遍历有先序遍历、中序遍历、后序遍历、层次遍历。 先序遍历:先访问根节点,然后访问左子树,再访问右子树。 中序遍历:先访问左子树,然后访问根节点,再访问右子树。 后序遍...

hestyle的博客 1万+

二叉树的先序遍历、中序遍历、后序遍历、层次遍历的递归实现

#include #include #include #define MAX 20 #define OK 1 #define ERROR 0 #define NULL 0 #define OVERFLOW 0 typedef char TElemType; typedef int Status; typedef struct BiTNode{ TElemType data;

u012791742的专栏 2871

实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法

#include"iostream" #define maxsize 50 using namespace std; class node{ private: char data; node* lchild; node* rchild; public: void createnode(node *&,char *); void fnode(node* b) { if(b!=NULL

Stay hungry 4755

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

创建二叉树就不说了,这里直接: 中序递归遍历算法 void InOrder(BiTree T){ if(T){ InOrder(T-&gt;lchild); cout&lt;&lt;T-&gt;data&lt;&lt;" "; InOrder(T-&gt;rchild); } } 中序非递归遍历算法 void InOrder(BiTree T){ //还是模拟上面的遍历...

梦否 1万+

二叉树系列(3)层序遍历的非递归实现

按照层次序实现二叉树遍历。 对于上图中的二叉树,层次遍历的实现结果如下 层次遍历的过程天然地符合队列这个数据结构,因此可以用队列方法来非递归地实现层次遍历。目前还不太清楚如何递归地实现层次遍历,网上看到的一些解法,声称采用了递归方法进行层次遍历,但是它们是在while循环中进行的递归,是一种伪递归。由此有可以猜测,可能这种遍历表现出来的数据访问方式确实不匹配递归的算法。下面

BUILD 3552

R语言新手也能搞定!WGCNA分析全流程代码详解(附常见报错解决方案)

本文为R语言新手提供了WGCNA分析的完整代码流程与实战指南。从环境配置、数据准备、软阈值选择、网络构建到模块-表型关联分析,逐步详解核心步骤。重点针对安装依赖、内存不足等常见报错提供了具体解决方案,帮助初学者避开陷阱,顺利完成加权基因共表达网络分析。

terraform7cloud的博客 539

C语言二叉树的基本三种遍历的递归实现

#include "stdafx.h" #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef char ElementType; typedef Position BinTree; typedef struct TNode *Position; struct TNode { ElementType Data; BinTree...

wwxy1995的博客 2605

48V电动车电池包拆解:硬核入门BMS硬件设计与故障排查

BMS(电池管理系统)是锂电应用的核心安全与性能保障模块,其本质是融合电化学、模拟电路、嵌入式控制与热管理的交叉系统。理解BMS不能止步于SOC算法或通信协议,而需回归硬件本体——从电压采样精度、MOSFET驱动时序、被动均衡散热设计到NTC热耦合布局,每一处物理实现都直接决定系统可靠性。48V平台因兼具安全性(<60V ELV)、复杂度(13–14串)与产业普及性,成为BMS工程实践的理想标本。本文聚焦真实电池包中的PCB级设计缺陷识别、关键参数现场验证(如±5mV采样误差、5mΩ导通内阻)、UART协议

weixin_29191081的博客 232

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

昨天写的前序遍历的递归与非递归算法,在非递归算法中主要还是借用到了栈这一工具,其实在中序遍历和后序遍历中依旧可以理由栈的特性来进行非递归的遍历 操作。 1.中序遍历 1.1 中序遍历的递归算法 二叉树的构造以在上一篇博文中有说到,这里就不再重复了,直接上代码 public void InOrderTraverse(TreeNode T){ if(T==null){

Tseng 6862

电源完整性之Cadence Sigrity Power DC_IR_Drop仿真

之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power DC组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power DC组件,然后先择licence,最后就可以打开我们之前转化好的.SPD文件。操作如下图: 2.设置层叠信息和过孔焊盘参数 层叠信息:每层的介质厚度、材料、介电常数、介质损耗角等,如

刘小同学的博客 1万+

RADIOML 2018.01A数据集在自动调制识别中的实战应用指南

本文提供了RADIOML 2018.01A数据集在自动调制识别(AMR)任务中的完整实战指南。内容涵盖从数据集介绍、数据获取与解包、高效预处理流程,到构建PyTorch数据管道、模型设计(如1D CNN、ResNet)以及训练调参策略。重点阐述了如何利用该数据集训练鲁棒的AI模型,以应对复杂信道环境和低信噪比挑战,并给出了详细的性能评估方法。

plant的博客 172

二叉树——中序遍历(递归/非递归)

中序遍历,即遍历顺序为:左节点、根节点、右节点。 二叉树节点: public class Node { public Node left; public Node right; public int val; public Node(int data){ this.val = data; } } 1. 递归方式 思想同二叉

gxx_csdn的博客 1万+

llama.cpp部署大模型

llama.cpp如何部署大模型

Eddy的博客 975

二叉树中序遍历(递归+非递归)Java

目录一、结构二、遍历二叉树1.中序遍历(递归)代码图解2.中序遍历(非递归)代码图解新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程...

dabusiGin的博客 8629

【OpenClaw从入门到精通】第26篇:从0到1构建OpenClaw二次发行版——企业专属AI平台实战指南(2026实测)

本文基于OpenClaw 2026.3.7开源内核,聚焦企业级AI平台的二次发行构建,从技术原理、实操流程到商业落地提供完整方法论。核心围绕“内核层-能力层-产品层”三层架构,详解源码编译、私有化部署、企业级特性开发(数据合规、国产化适配、业务系统集成)、产品化包装等关键步骤,并通过审计行业“智审助手”虚拟实战案例具象化落地路径。文章兼顾新手入门与进阶提升,提供可直接复用的代码、配置文件及执行结果,解决企业对AI Agent“开箱即用”“数据不出域”“业务适配”的核心诉求,助力开发者快速打造企业专属AI平台

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 710

C#实现低通和高通滤波算法

低通滤波器允许通过低于某个截止频率的信号成分,并且抑制高于该频率的成分。而高通滤波器则允许通过高于某个截止频率的信号成分,并抑制低于该频率的成分。巴特沃斯滤波器是一种对称的滤波器,具有平坦的幅度响应和最小的群延迟。低通和高通滤波是数字信号处理中常用的滤波技术,用于滤除或增强信号中的特定频率成分。在本篇文章中,我们将使用C#编程语言来实现低通和高通滤波算法。以上就是使用C#实现低通和高通滤波算法的示例代码。你可以根据自己的需求调整截止频率和采样率,将这些代码应用于你的项目中。是滤波器的截止频率,

XisVisual_Basic的博客 1274

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

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

sunnyoldboy博客 2万+

MGC3130 3D手势识别传感器原理图设计,已量产(交互传感器)

最近在落地一款互动艺术装置的控制模块,选了 Microchip 的 MGC3130 做核心 —— 这颗芯片算是 GestIC® 近场传感技术的 “熟面孔” 了,把 3D 手势识别、运动跟踪的信号处理都集成在一颗芯片里,0-10cm 的检测距离刚好适配桌面级互动场景,挥挥手就能控设备的体验,放在艺术装置里确实很出效果。今天扒一下实际跑通的原理图,聊聊每个模块的设计思路。

不脱发的程序猿 369

非递归先序遍历二叉树总结(3种方法)

算法 非递归先序遍历二叉树总结(3种方法) @author:Jingdai @date:2020.12.03 递归先序遍历二叉树非常的简单,但是面试的时候面试官经常会要求我们写非递归的方法,这里总结一下。 方法1 先写一个最简单的方法。首先回想一下层次遍历二叉树的代码,利用一个队列完成树的遍历。如下代码。 public static void levelOrderTraverse(TreeNode root) { if (root == null) return; Li

qq_41512783的博客 8008

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

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

在此之前,我们已经学习了中序遍历二叉树的递归算法,相信大家已经将其牢牢掌握了. 除了使用递归思想作为求解问题的钥匙,还可以借助栈来以非递归方式实现该问题的求解. 首先,我们要讨论存储二叉树结点信息的栈的形态:是只存储二叉树结点的指针,还是要完整存储二叉树结点的信息(LChild指针+数据域data+RChild指针). 在这里先和大家说明,经过程...

weixin_42048463的博客 4635

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

二叉树的遍历(先序遍历,中序遍历,后序遍历,层次遍历)

二叉树简介 维基百科对二叉树的定义:二叉树(英语:Binary tree)是每个节点最多只有两个分支(不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”和“右子树”。二叉树的分支具有左右次序,不能颠倒。 二叉树的遍历有4种方式,先序遍历,中序遍历,后序遍历,层次遍历,前三者均属于深度优先遍历,先序、中序、后序指的是遍历时根节点相对于左右孩子的次序,先序遍历的顺序为根节点->左子树->

胡LiuJia@BLOG 7189

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

二叉树的非递归遍历及层次遍历

二叉树的基本操作请看:http://blog.youkuaiyun.com/sysu_arui/article/details/7865876 前面简答介绍了二叉树的基本操作,包括二叉树的建立,销毁,递归遍历,以及其他一些常见的递归算法,现在集中讨论一下二叉树的层次遍历和非递归遍历。 二叉树的层次遍历要用到队列,前序、中序和后序非递归遍历要用到栈,这里我就不自己写队列和栈了,直接使用C++标准库中的容器适

arui的专栏 1万+

【数据结构】遍历二叉树(递归和非递归遍历的先序、中序和后序遍历、层次遍历法)

二叉树 递归和非递归遍历的先序、中序和后序遍历、层次遍历法

ChenZHIHAO_y的博客 1972

二叉树的遍历(递归和非递归)

了解二叉树中遍历的方法以及实现,其中包括递归算法和非递归

chenjia0512的博客 2172

Python实现二叉树遍历的递归和非递归算法

本文主要用python实现二叉树的4种遍历算法,除层次遍历外,前序、中序和后序遍历分别包含递归和非递归2种实现方式。 前序遍历 # -----------前序遍历 ------------ # 递归算法 def pre_order_recursive(self, T): if T == None: return print(...

From Zero to Hero 3635

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

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

1327
上一篇: Java中你必须记住的String方法
下一篇: 哈夫曼树、哈夫曼编码——哈哈,至少你要了解一下原理吧
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值