二叉树先序遍历非递归遍历算法
/*二叉树的先序遍历非递归算法目标遍历的二叉树:1/ \2 4/ \3 5 待输出结果为1,2,3,5,41.首先得用上面定义的结构体把这颗树表示出来2.表示出这颗树后在调用二叉树的先序遍历非递归算法
*/
#include <iostream>
using namespace std;
# define maxSize 10
//树结点的结构体,存储的是int整型的数据
typedef struct BTNode{int data;struct BTNode *lchild;struct BTNode *rchild;
}BTNode;/*二叉树的先序遍历非递归算法目标遍历的二叉树:1/ \2 4/ \3 5 待输出结果为1,2,3,5,41.首先得用上面定义的结构体把这颗树表示出来2.表示出这颗树后在调用二叉树的先序遍历非递归算法
*/void createBTree(BTNode *&p)
{ /*生成这颗树,这里就是直接按照二叉树的样子来逐一生成p做为根结点(root)*/p = (BTNode*)malloc(sizeof(BTNode));p->data = 1;BTNode *n2, *n3, *n4, *n5 ;//分别对应存储元素2,4,3,5的4个结点n2 = (BTNode*)malloc(sizeof(BTNode));n3 = (BTNode*)malloc(sizeof(BTNode));n4 = (BTNode*)malloc(sizeof(BTNode));n5 = (BTNode*)malloc(sizeof(BTNode));n2->data = 2;n3->data = 4;n4->data = 3;n5->data = 5;p->lchild = n2;p->rchild = n3;n2->lchild = n4;n2->rchild = n5;n3->lchild = n3->rchild = NULL;n4->lchild = n4->rchild = NULL;n5->lchild = n5->rchild = NULL;
}
void preorderNonrecursion(BTNode *p){if (p != NULL){BTNode *q;BTNode *stack[maxSize]; //定义一个栈int top = -1; //初始栈stack[++top] = p; //根结点入栈while (top != -1) //如果栈非空则循环{q = stack[top--]; //栈顶结点出栈cout << q->data <<endl;if (q->rchild != NULL) //一定保证q的右孩子先入栈{stack[++top] = q->rchild;}if (q->lchild != NULL) //这样出栈的时候左孩子在右孩子之前先访问{stack[++top] = q->lchild;}}}
}int main()
{BTNode *p;createBTree(p);preorderNonrecursion(p);return 0;
}
二叉树先序遍历非递归遍历算法相关推荐
- 实现二叉树的三种非递归遍历算法
[问题描述] 编写程序,实现二叉树的三种非递归遍历算法:先序非递归,中序非递归,后序非递归. [输入形式] 输入建树序列. [输出形式] 输出三种遍历序列. [样例输入] A B C # # # # ...
- 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程
图的邻接矩阵表示 通常图的表示有两种方法:邻接矩阵,邻接表. 本文用邻接矩阵实现,一是代码量更少,二是代码风格也更贴近C语言.但不论是图的哪种实现方式,其基本的实现思想是不变的. 1:节点的信息,我们 ...
- 【树】二叉树的两种非递归遍历方法
非递归的遍历需要使用栈保存当前不输出的结点,并且三种遍历顺序步骤有所不同. 中序遍历 1.查看其当前结点是否为空: 若非空则将当前结点入栈,指针指向其左孩子: 若当前结点为空,说明上一个入栈的结点没有 ...
- 二叉树 中序非递归遍历算法 c++
二叉树的中序非递归算法,详见下 首先,二叉树结点定义 typedef struct BiTNode//二叉树结点结构 {string data;struct BiTNode *lchild,*rchi ...
- C++实现递归,非递归遍历二叉树(前序,中序,后序)
初学二叉树那会儿,始终掌握不好二叉树的遍历方法,更认为非递归遍历晦涩难懂没有掌握的意义.实际上非递归的遍历方法很有用处,由于每次递归都需要将函数的信息入栈,当递归层数太深很容易就导致栈溢出,所以这个时 ...
- 对于二叉树三种非递归遍历方式的理解
利用栈实现二叉树的先序,中序,后序遍历的非递归操作 栈是一种先进后出的数据结构,其本质应是记录作用,支撑回溯(即按原路线返回):因此,基于其的二叉树遍历操作深刻的体现了其特性: 若后续的输入和其前面的 ...
- 【转】更简单的非递归遍历二叉树的方法
[转]更简单的非递归遍历二叉树的方法 解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出 ...
- 二叉树的非递归遍历(统一的模板)
二叉树的非递归遍历 前言 树的存储结构 先序遍历 先序的递归遍历 先序的非递归遍历 中序遍历 中序的递归遍历 中序遍历的非递归算法 后序遍历 后序的递归遍历 后序的非递归遍历 层次遍历 层次遍历获得每 ...
- 更简单的非递归遍历二叉树
解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出非递归遍历恐非易事.正因为并非易事,所 ...
最新文章
- 业余快速学习虚幻引擎教程
- JSON简介以及用法汇总
- 架构编译器框架系统 LLVM 使用简介
- Python操作MSSQL
- html5 写json 文件,HTML5实现本地JSON文件的读写
- Windows Vista桌面窗口管理器(3)
- 小辣椒android密码怎样开,小辣椒手机忘记密码怎么恢复出厂设置
- json文件使用tips
- python 简易计算器
- 计算机编程必备英语单词,编程序常用英语单词
- 目标检测算法之SSD
- Python ADF检验
- 【vue笔记】页面跳转顺便传个值
- 一季度险资137亿建仓151股 业绩环增公司超四成(转自新浪)
- 蜗牛星际C单下实现黑群的局域网唤醒
- 如何策划一场虚拟活动?Mixlab 教你元宇宙布展思路~
- OpenKruise原理介绍和安装
- Java 多线程之间通讯(面试概念解答三)
- 方正代理商专业素质不怎么地
- 网聊是不是就要劈腿上床?
热门文章
- matlab分块矩阵取某一块_MATLAB实现矩阵分块相乘
- 灵动微电子MM32SPIN0280无感方波BLDC电动工具硬件参考设计
- 一段惊险刺激的真实体验 手机屏幕被我摔坏了,手机adb暂时能连接但是手机root了,怎么搞。...
- Java:封装案例(续)
- IDEA出现乱码的各种解决方法
- Laravel 实现创建订单30分钟未支付自动关闭的功能
- 天猫数据分析工具(天猫实时数据)
- 传统行业互联网化的商业模式分析框架
- 关于Java中Switch支持的数据类型
- 前端Vue开发,多关键字搜索时,搜索结果高亮显示(解决输入英文时,会错误的把html标签渲染的问题)