利用队列实现层序遍历

关于二叉树其他的基本操作可以看我前几篇文章:
二叉树的基本操作:二叉树的后序遍历非递归算法

二叉树的遍历:前序非递归和中序非递归

二叉树基本操作:二叉树的创建与递归遍历

基础知识:
直接调用C++内部的queue
要有头文件 #include
队列的基本操作:
定义一个queue的变量 queue Q
查看是否为空范例 Q.empty() 是的话返回1,不是返回0;
从已有元素后面增加元素 Q.push()
输出现有元素的个数 Q.size()
返回第一个元素 Q.front()
显示最后一个元素 Q.back()
清除第一个元素 Q.pop()

程序执行时,输入
ABDH##I##E##CF#J##G##
创建如图所示的二叉树
代码如下:

#include <iostream>
#include <stack>
#include <queue>
using namespace std;typedef char datatype;//二叉树的左右链表示,也叫做二叉链表表示
typedef struct node {datatype data;struct node* lchild;struct node* rchild;
}Node;typedef Node* Btree;//创建新的结构体list,包含Btree和int,来帮助实现后序非递归算法
typedef struct list {Btree ptr;int flag;
}List;Btree preCreateBT() {Btree T;char ch;cin >> ch;if (ch == '#') {T = NULL;}else {T = new node;T->data = ch;T->lchild = preCreateBT();T->rchild = preCreateBT();}return T;
}//先序遍历
/*
void PreOrder(Btree BT) {if (BT != NULL) {cout << BT->data<<endl;PreOrder(BT->lchild);PreOrder(BT->rchild);}
}
*///中序遍历
/*
void InOrder(Btree BT) {if (BT != NULL) {InOrder(BT->lchild);cout << BT->data << endl;InOrder(BT->rchild);}
}
*///后序遍历
/*
void PostOrder(Btree BT) {if (BT != NULL) {PostOrder(BT->lchild);PostOrder(BT->rchild);cout << BT->data << endl;}
}
*///先序遍历非递归算法
/*
void PreOrderNoRecur(Btree root) {stack<Btree> S;while (root != NULL || !S.empty()) {while (root != NULL) {cout << root->data << endl;S.push(root);root = root->lchild;}if (!S.empty()) {root = S.top();S.pop();root = root->rchild;}}
}
*///中序遍历非递归算法
/*
void InOrderNoRecur(Btree root) {stack<Btree> S;while (root != NULL || !S.empty()) {while (root != NULL) {S.push(root);root = root->lchild;}if (!S.empty()) {root = S.top();cout << root->data << endl;S.pop();root = root->rchild;}}
}
*///后序遍历非递归算法
/*
void PostOrderNoRecur(Btree root) {stack<List> newS;while (root != NULL || !newS.empty()) {while (root != NULL) {List element;element.ptr = root;element.flag = 1;newS.push(element);root = root->lchild;}while (!newS.empty() && newS.top().flag == 2) {cout << newS.top().ptr->data << endl;newS.pop();}if (!newS.empty()) {newS.top().flag = 2;root = newS.top().ptr->rchild;}}}*///二叉树的层序遍历算法
void LevelOrder(Btree root) {queue<Btree> Q;Btree q;if (root == NULL) {return;}Q.push(root);while (!Q.empty()) {q = Q.front();cout << q->data << endl;Q.pop();if (q->lchild != NULL) {Q.push(q->lchild);}if (q->rchild != NULL) {Q.push(q->rchild);}}
}
int main() {//前序遍历创建树Btree TreeOne = preCreateBT();//先序遍历(递归)//PreOrder(TreeOne);//中序遍历(递归)//InOrder(TreeOne);//后序遍历(递归)//PostOrder(TreeOne);//先序遍历非递归算法//PreOrderNoRecur(TreeOne);//中序遍历非递归算法//InOrderNoRecur(TreeOne);//后序遍历非递归算法//PostOrderNoRecur(TreeOne);//利用队列实现层序遍历LevelOrder(TreeOne);
}

二叉树基本操作:利用队列实现层序遍历相关推荐

  1. 32、用队列实现层序遍历-102.二叉树的层序遍历

    题目描述: 给你二叉树的根节点 root ,返回其节点值的 层序遍历 . (即逐层地,从左到右访问所有节点). 思路:之前在剑指Offer中做过 使用队列先入先出的性质,实现层序遍历! DFS(深度优 ...

  2. LeetCode 958. 二叉树的完全性检验(层序遍历)

    1. 题目 给定一个二叉树,确定它是否是一个完全二叉树. 百度百科中对完全二叉树的定义如下: 若设二叉树的深度为 h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第 h 层所有的 ...

  3. LeetCode 993. 二叉树的堂兄弟节点(层序遍历)

    文章目录 1. 题目 2. 解题 2.1 层序遍历 2.2 递归查找 1. 题目 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同 ...

  4. 2021-10-11 ! LeetCode226. 翻转二叉树 的前中后层序遍历写法

    还是遍历框架的应用 //! 二叉树的翻转:本质就是二叉树的遍历的应用 //! 以任意形式遍历二叉树的每一个结点,访问每一个结点的同时调换其左右子树 //! 中序遍历额外注意一下调换后的参数问题 Nod ...

  5. leetcode111. 二叉树的最小深度(层序遍历10)

    一:题目 二:上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* Tre ...

  6. 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)

    Description 已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. Input 输入数据有多行,第一行是一个整数t (t<1 ...

  7. 二叉树----层序遍历

    1.层序遍历 层序遍历:层序遍历即逐层按顺序遍历二叉树的各个节点,故层序遍历又叫广度优先遍历. 如图:广度优先遍历即按ABCDEFGH的顺序遍历 2.解题思路 1.这里我们利用队列先进先出的结构特点, ...

  8. 102 二叉树层序遍历

    层序遍历,每次层的输出是是一个一维数组,整个二叉树的输出结果是二维数组 BFS遍历,依托于队列结构,每次在根节点出栈的时候,将其值加在结果列表中,然后将他的左右孩子节点入队列. 层序遍历相对于BFS, ...

  9. 二叉树的广度优先遍历(层序遍历)

    先定义一个二叉树的结点 再创建二叉树,这里就不写了,之前的有创建二叉树的博客. 层序遍历 用到栈的思想, 1 先让根 节点进队列,2 然后读队顶元素,3 让他出队列4 打印它的值5 让队顶元素的左右子 ...

最新文章

  1. 模型裁剪--Rethinking the Value of Network Pruning
  2. 企业生产常用的磁盘管理方式介绍
  3. windows下DOS命令关闭占用的端口
  4. java web mvc思想介绍
  5. 为什么JavaScript现在和将来都是编程语言首选?
  6. 抓取标准报表ALV GRID上的数据
  7. ReactJS入门之ReactJS简介
  8. linux 字符串截取_第13篇:Linux防火墙的日志基本审计
  9. 访问艺术馆(codevs 1163)树形DP
  10. 一个简单的姓名生成器
  11. jquery api中文网址
  12. 安卓平板python编程软件下载_notepad++下载-notepad++中文版下载v7.6.2 中文增强版-西西软件下载...
  13. 在线教育开源源码:消费者如何规避线上教育“陷阱”营销?
  14. 对注册会计师CPA的简单了解
  15. 清除右键菜单多余的选项
  16. 文华学院计算机专业师资,华中科技大学文华学院“最受欢迎教师”名单
  17. 出现无法解析的外部符号 LZ4_decompress_safe等问题
  18. qt opengl 3d基本形状-螺旋管
  19. 下载Windows ISO镜像的方法 (超详细 适合新手入门)
  20. 将 多个空格 替换为一个逗号

热门文章

  1. 史上最全的冲压模具资料
  2. 基于AT89C51单片机的并入串出乘法口诀的设计与仿真
  3. 大学生职业规划范文 计算机系,大学生职业生涯规划书范文(计算机系)
  4. jquery was not called 解决办法
  5. win7家庭高级版开启administrator账户
  6. 用无代码快速开发平台实现软件项目快速低成本交付
  7. 扩频通信捕获matlab,扩频通信捕获的matlab仿真
  8. UML建模工具最近更新(2021年2月)(一)Astah、SIM、BOUML、Papyrus、drawio
  9. Redis的事务和锁机制(乐观锁和悲观锁)
  10. 加速中国投资,VMware开通中文支持热线