/*二叉树的先序遍历非递归算法目标遍历的二叉树: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;
}

二叉树先序遍历非递归遍历算法相关推荐

  1. 实现二叉树的三种非递归遍历算法

    [问题描述] 编写程序,实现二叉树的三种非递归遍历算法:先序非递归,中序非递归,后序非递归. [输入形式] 输入建树序列. [输出形式] 输出三种遍历序列. [样例输入] A B C # # # # ...

  2. 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程

    图的邻接矩阵表示 通常图的表示有两种方法:邻接矩阵,邻接表. 本文用邻接矩阵实现,一是代码量更少,二是代码风格也更贴近C语言.但不论是图的哪种实现方式,其基本的实现思想是不变的. 1:节点的信息,我们 ...

  3. 【树】二叉树的两种非递归遍历方法

    非递归的遍历需要使用栈保存当前不输出的结点,并且三种遍历顺序步骤有所不同. 中序遍历 1.查看其当前结点是否为空: 若非空则将当前结点入栈,指针指向其左孩子: 若当前结点为空,说明上一个入栈的结点没有 ...

  4. 二叉树 中序非递归遍历算法 c++

    二叉树的中序非递归算法,详见下 首先,二叉树结点定义 typedef struct BiTNode//二叉树结点结构 {string data;struct BiTNode *lchild,*rchi ...

  5. C++实现递归,非递归遍历二叉树(前序,中序,后序)

    初学二叉树那会儿,始终掌握不好二叉树的遍历方法,更认为非递归遍历晦涩难懂没有掌握的意义.实际上非递归的遍历方法很有用处,由于每次递归都需要将函数的信息入栈,当递归层数太深很容易就导致栈溢出,所以这个时 ...

  6. 对于二叉树三种非递归遍历方式的理解

    利用栈实现二叉树的先序,中序,后序遍历的非递归操作 栈是一种先进后出的数据结构,其本质应是记录作用,支撑回溯(即按原路线返回):因此,基于其的二叉树遍历操作深刻的体现了其特性: 若后续的输入和其前面的 ...

  7. 【转】更简单的非递归遍历二叉树的方法

    [转]更简单的非递归遍历二叉树的方法 解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出 ...

  8. 二叉树的非递归遍历(统一的模板)

    二叉树的非递归遍历 前言 树的存储结构 先序遍历 先序的递归遍历 先序的非递归遍历 中序遍历 中序的递归遍历 中序遍历的非递归算法 后序遍历 后序的递归遍历 后序的非递归遍历 层次遍历 层次遍历获得每 ...

  9. 更简单的非递归遍历二叉树

    解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出非递归遍历恐非易事.正因为并非易事,所 ...

最新文章

  1. 业余快速学习虚幻引擎教程
  2. JSON简介以及用法汇总
  3. 架构编译器框架系统 LLVM 使用简介
  4. Python操作MSSQL
  5. html5 写json 文件,HTML5实现本地JSON文件的读写
  6. Windows Vista桌面窗口管理器(3)
  7. 小辣椒android密码怎样开,小辣椒手机忘记密码怎么恢复出厂设置
  8. json文件使用tips
  9. python 简易计算器
  10. 计算机编程必备英语单词,编程序常用英语单词
  11. 目标检测算法之SSD
  12. Python ADF检验
  13. 【vue笔记】页面跳转顺便传个值
  14. 一季度险资137亿建仓151股 业绩环增公司超四成(转自新浪)
  15. 蜗牛星际C单下实现黑群的局域网唤醒
  16. 如何策划一场虚拟活动?Mixlab 教你元宇宙布展思路~
  17. OpenKruise原理介绍和安装
  18. Java 多线程之间通讯(面试概念解答三)
  19. 方正代理商专业素质不怎么地
  20. 网聊是不是就要劈腿上床?

热门文章

  1. matlab分块矩阵取某一块_MATLAB实现矩阵分块相乘
  2. 灵动微电子MM32SPIN0280无感方波BLDC电动工具硬件参考设计
  3. 一段惊险刺激的真实体验 手机屏幕被我摔坏了,手机adb暂时能连接但是手机root了,怎么搞。...
  4. Java:封装案例(续)
  5. IDEA出现乱码的各种解决方法
  6. Laravel 实现创建订单30分钟未支付自动关闭的功能
  7. 天猫数据分析工具(天猫实时数据)
  8. 传统行业互联网化的商业模式分析框架
  9. 关于Java中Switch支持的数据类型
  10. 前端Vue开发,多关键字搜索时,搜索结果高亮显示(解决输入英文时,会错误的把html标签渲染的问题)