#include<iostream>
#include<stack>
#include<queue>
using namespace std;
typedef struct Node
{
char data;
Node*lchild;
Node*rchild;
}Node;
//创建一个节点
Node*BuyNode()
{
Node* p = new(nothrow)Node;
if(p==NULL)
{
exit(-1);
}
memset(p,0,sizeof(Node));
return p;
}
//创建一棵二叉树
Node* CreateTree(char *&s)
{
if(s==NULL)
{
return NULL;
}
Node*p=NULL;
if((*s) != '$')
{
p = BuyNode();
p->data = *s;
p->lchild = CreateTree(++s);
p->rchild = CreateTree(++s);
}
return p;
}
//先序递归遍历
void Frond(Node*p)
{
if(p)
{
cout<<p->data<<' ';
Frond(p->lchild);
Frond(p->rchild);
}
}
//先序非递归遍历
void _Frond(Node*p)
{
stack<Node*>s;
while(p!=NULL || !s.empty())
{
while(p!=NULL)
{
s.push(p);
cout<<p->data<<" ";
p=p->lchild;
}
if(!s.empty())
{
p= s.top();
s.pop();
p=p->rchild;
}
}
}
//层次遍历
void CenCi(Node*p)
{
if(p==NULL)
{
return;
}
int m = 0;
queue<Node*>s;
int qsize;
s.push(p);
while(!s.empty())
{
m++;
qsize = s.size();//记录当前层次的节点数
int i=0;
while(i<qsize)
{
p=s.front();
if(p->lchild)
{
s.push(p->lchild);
}
if(p->rchild)
{
s.push(p->rchild);
}
cout<<p->data<<" ";
s.pop();
i++;
}
cout<<m<<endl;//显示每一层次的结点
}
}
int main()
{
char *s="fdba$$c$$e$$g$ih$$jp$$$$";
Node*root=CreateTree(s);
Frond(root);
cout<<endl;
_Frond(root);
cout<<endl;
CenCi(root);
cout<<endl;
return 0;
}
相关推荐
二叉树的各种遍历(前中后非递归、层次、s形遍历)
之前去头条面试,凉在了二面的非递归二叉树遍历上,为避免再凉在同样的问题上,所以总结了一下。 二叉树有前序、中序、后序、层次、s形等等,前三种有用递归实现(下面就不实现了,很简单),非递归实现。其实层次遍历就是广度优先遍历(BFS),深度优先遍历就是前中后序遍历。下面分别来实现一下。 二叉树定义 typedf struct node{ int data; struct node* lchil...
二叉树的非递归遍历以及层次遍历
中序遍历的顺序为左中右,所以一开始不可以先将根节点加入到栈中,我们需要先找到二叉树中最左边的结点,并将之前从root结点到最左边的结点之间遍历的所有结点,然后在相继弹出并将右子树加入到栈中。前序遍历为中左右,所以我们一开始需要将根节点放入栈中,然后在弹出的时候西安把右子树放入栈中,再把左子树放入栈中,这样下一步就会先弹出左结点,再依次迭代。与前序遍历类似,因为是左右中的顺序,所以可以先翻转为中左右顺序入栈,再将结果翻转过来就能得到后序遍历的结果。若它有左/右孩子结点,将左/右孩子结点进队。
数据结构-二叉树[非递归遍历](先序遍历,中序遍历,后续遍历,层次遍历)
本文参考自数据结构-二叉树[非递归遍历](先序遍历,中序遍历,后续遍历,层次遍历) 查看原文: 原文地址 数据结构-二叉树[非递归遍历] 1.二叉树概念 2.二叉树的构造及删除 不得不说下二叉树的构造,本来我是想找非递归实现的,结果只看到了完全二叉树和满二叉树(下文有)的构造方法,所以这一部分我暂时函数用前序的方法构造和删除,然后二叉树的概念在上篇文:二叉树的递归实现有介绍所以放...
“非递归” 实现二叉树的“前序、中序、后序、层序”遍历
相信学过或是了解过二叉树的朋友都知道,他的前序、中序、后序遍历使用递归法实现非常简单,那么如果使用非递归的方式来解,也就是使用迭代来解,你还能将他拿下么?实际上一点都不难,往下看~
关于三维全波电磁场仿真软件CST的安装和问题解决
百度网盘链接:https://pan.baidu.com/s/1RgWr8Qau1EzSOlh29SewFQ提取码:fzza这里是2023版本的CST,需要其他版本的uu们可以去官网或者其他人的网盘下载。
Unity中URP实现水体效果(泡沫)
在上篇文章中,我们实现了水体的深度。在这篇文章中,我们来使用上篇文章采样后的深度图来实现水中的泡沫效果。
数据结构与算法:对于二叉树层次遍历及三种非递归遍历所需辅助空间的理解
数据结构与算法:对于二叉树层次遍历及三种非递归遍历所需辅助空间的理解
【深度学习】肺结节分割项目实战一:处理数据集
一、LIDC-IDRI数据集简介 官方网站 肺图像数据库协会的图像收集(LIDC-IDRI)包括诊断和带有病变注释标记的肺癌筛查胸部CT。这是一个网络公开的国际资源,用于肺癌检测和诊断的计算机辅助诊断(CAD)方法的开发、培训和评估。 数据集包含1018个病例,每个病例包括来自临床胸部CT扫描的图像和一个相关的XML文件,该文件记录了由四名经验丰富的胸部放射科医生进行的两阶段图像注释过程的结果。在最初的盲读阶段,每个放射科医生独立审查每个CT扫描,并标记出属于三种类型之一的病变(“结节>= 3mm”,
遍历的三种算法——递归、非递归、层次
原文链接:https://blog.youkuaiyun.com/weixin_46432495/article/details/120497774。
告别编译噩梦:Vcpkg+Cmake一站式集成Tesseract-OCR C++开发环境(Windows)
本文详细介绍了如何在Windows系统上使用Vcpkg和CMake快速集成Tesseract-OCR C++开发环境,解决传统编译过程中的依赖问题。通过一键安装和自动化配置,开发者可以高效搭建OCR识别系统,支持中英文识别,并提供了常见问题的解决方案和进阶技巧。
T100服务端接口实战:从注册到日志排查的全链路开发指南
本文提供了一份T100服务端接口开发的全链路实战指南。从程序注册与框架签出开始,详细讲解了接口的数据结构设计、核心业务逻辑编写,到最终的部署上线与调用验证。文章重点分享了如何利用日志文件高效定位和排查接口问题,帮助开发者快速掌握T100接口开发的关键步骤与实用技巧。
二叉树的非递归遍历及层次遍历
二叉树的基本操作请看:http://blog.youkuaiyun.com/sysu_arui/article/details/7865876 前面简答介绍了二叉树的基本操作,包括二叉树的建立,销毁,递归遍历,以及其他一些常见的递归算法,现在集中讨论一下二叉树的层次遍历和非递归遍历。 二叉树的层次遍历要用到队列,前序、中序和后序非递归遍历要用到栈,这里我就不自己写队列和栈了,直接使用C++标准库中的容器适
低照度与极端天气环境中的YOLOv8优化:CPA-Enhancer网络的应用与分析
为了克服上述问题,本文提出了一种名为的网络改进方案。CPA-Enhancer通过引入链式思考机制和改进的注意力机制,有效地提升了YOLOv8在低照度和复杂天气下的表现。本文提出了针对低照度和恶劣天气条件下目标检测的YOLOv8改进方案——CPA-Enhancer链式思考网络。通过引入低照度图像增强和多尺度特征融合技术,CPA-Enhancer显著提高了YOLOv8在低光照、雾霾、雨雪等环境下的检测性能。实验结果表明,CPA-Enhancer相较于原始YOLOv8,在多个指标上都有显著的提升,尤其是在mAP。
二叉树的遍历--递归、非递归、按层次遍历
二叉树是一种树形结构,其特点是每个结点至多只有两棵子树( 即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其。将该结点的右孩子和左孩子依次进栈,因为我们进行的是先序遍历,根据栈的后进先出规则,左孩子后进的,则会先被弹出栈。然后继续将‘2’出队打印,并将‘2’的左孩子右孩子入队,此时队列中有‘8’,‘1’,‘4’;二叉树的遍历有很多方法,例如递归的先序、中序、后序遍历,非递归遍历,按层次遍历等。然后将根结点出队打印,并将根结点的左孩子右孩子入队,此时队列中有‘2’,‘8’;
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
二叉树的递归遍历、非递归遍历、层次遍历
1.递归遍历 2.非递归遍历 3.层次遍历 1.递归遍历 在使用递归遍历的时候,每个节点会经过三次. public class PreInPosTraversal { public static class Node { public int value; public Node left; public Node right; public Node(int da...
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
非递归按层次遍历二叉树
//非递归按层次遍历二叉树 算法思想:按层次遍历需要一个队列,开始将二叉树的头结点入队, 然后每次从队列中删除一个节点并输出节点信息,接下来把它的非空 左右孩子入队,下一个输出的位它的右面堂兄弟或兄弟节点信息,在把它的 左右孩子入队,这两个孩子在上面两个孩子的后面(紧跟其后) 这样当队列为空时算法结束 注意:要声明全局变量数组与front 和
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
js实现按层次非递归遍历二叉树
-------------------------定义二叉树的存储结构 class BiTNode{ constructor(lchild,data,rchild){ this.lchild=lchild; this.data=data; this.rchild=rchild; } setLchild(lchild){ ...
二叉树的非递归遍历前中后序和层次遍历
#include<stdio.h> #include<stack.c> #include<stdbool.h> #include<SquenceNode.c> #define MaxSize 20 typedef struct TreeNode *BinTree; typedef BinTree Position; typedef int ElementType; //二叉树的链式存储结构 struct TreeNode { ElementTy
二叉树的非递归遍历(层次遍历,非递归中序、先序遍历)
上一篇文章介绍的是二叉树中有关递归的一些运算,这一篇主要介绍二叉树中非递归遍历的实现。主要引入了堆栈和队列的思想。其中层次遍历运用了队列的思想,非递归的中序、先序和后序遍历皆借助了栈的思想。
二叉树的遍历以及递归、非递归实现 / 层次遍历
二叉树的遍历 二叉树遍历的经典方法有四种,前序遍历、中序遍历、后序遍历和层次遍历。 其中,前、中、后序,表示的是节点与它的左右子树节点遍历打印的先后顺序。 前序遍历是指,对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。 中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树。 后序遍历是指,对于树中的任意节点来...
二叉树的层次遍历(递归和非递归)
/* 二叉树的层次遍历结果:递归和非递归 内容源自网络,部分代码修改 */ #include <iostream> #include <cstdlib> #include <queue> using namespace std; typedef char ElemType; typedef struct BitNode{ ElemType data; struct BitNode *lchild, *rchild; }*BiTree; //创建二叉树 void Cre
二叉树的遍历(递归、非递归、层次遍历)
树结构图 创建树结构 package binaryTree; /** * @author 黄河祥 * @create 2020/3/31 20:18 */ public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { ...
二叉树的前序、中序、后序、层次遍历(递归+非递归)+层次遍历分层输出-java实现
总结一下,二叉树的各种遍历的递归和非递归实现,以及层次遍历(每一层输出一行) 实现代码如下: package stone.offer.scu; import java.awt.HeadlessException; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java...
1554



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



