DS二叉树--层次遍历
目录
题目描述
思路分析
AC代码
题目描述
层次遍历二叉树,是从根结点开始遍历,按层次次序“自上而下,从左至右”访问树中的各结点。
建树方法采用“先序遍历+空树用0表示”的方法
要求:采用队列对象实现,函数框架如下:
输入
第一行输入一个整数t,表示有t个测试数据
第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行
输出
逐行输出每个二叉树的层次遍历结果
输入样例1
2
AB0C00D00
ABCD00E000FG00H0I00
输出样例1
ABDC
ABFCGHDEI
思路分析
首先把树给建立起来,递归建立树的每个节点,先建立数据,再递归建立左子树,然后递归建立右子树,递归结束的条件是到了字符串末尾或者遇到字符0。
层次遍历实际上就是广度遍历,就是BFS搜索。
BFS是用队列作为存储的数据结构。
先将开始遍历的首节点入队,然后开始循环遍历,循环跳出的条件是队列为空。
在循环里面,取队首元素,出队,输出数据,然后将所有子树节点入队,循环操作下去完事。
AC代码
#include <iostream>
#include <string>
#include <queue>
using namespace std;
class BiTreeNode {
public:char data; //数据域BiTreeNode *leftChild, *rightChild; //左右子树指针BiTreeNode():leftChild(NULL), rightChild(NULL){}~BiTreeNode() {}
};class BiTree {
private:BiTreeNode *root; //根结点指针string sTree; //建树字符串int pos; //标识建树字符串的当前字符位置BiTreeNode * CreateTree();//建树私有函数
public:BiTree():root(NULL) {};void Create(string vArray); //建树公有接口,参数是特定的先序遍历字符串void LevelOrder();void LevelOrder(BiTreeNode*T);
};
void BiTree::Create(string vArray)
{ pos=0;sTree.assign(vArray); //把参数保存到内部字符串root = CreateTree(); //建树成功后root指向根结点
}
BiTreeNode* BiTree::CreateTree() {if(pos==sTree.size()||sTree[pos]=='0'){pos++;return NULL;}BiTreeNode*T=new BiTreeNode();T->data=sTree[pos++];T->leftChild=CreateTree();T->rightChild=CreateTree();return T;
}
void BiTree::LevelOrder() { LevelOrder(root);}
void BiTree::LevelOrder(BiTreeNode *T) {queue<BiTreeNode*>tq;BiTreeNode*p=T;if(p)tq.push(p);while(!tq.empty()){p=tq.front();tq.pop();if(p){cout<<p->data;tq.push(p->leftChild);tq.push(p->rightChild);}}cout<<endl;
}
int main()
{ int t;string vArray;cin>>t;while(t--){ cin>>vArray;BiTree myTree;myTree.Create(vArray);myTree.LevelOrder();}return 0;
}
DS二叉树--层次遍历相关推荐
- [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS | BFS)
目录: 1.Binary Tree Level Order Traversal - 二叉树层次遍历 BFS 2.Binary Tree Level Order Traversal II - 二叉树层次 ...
- 数据结构-二叉树层次遍历
首先介绍下二叉树的层次遍历即按照顺序对树节点依次访问,如下图: 顺序遍历的结果为:ABCDEFGHIJK 我们可以借助一个队列来实现二叉树的层次遍历:思路如下: 先将二叉树根节点入队,然后出队,访问该 ...
- 二叉树层次遍历--广度遍历和深度遍历
问题来源:二叉树层次遍历 问题描述:给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例子: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 ...
- 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)
下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...
- 树(二叉树层次遍历输出及二叉树前序遍历输入)
前两篇解释了二叉树的有关逻辑概念及前中后序输出递归代码的实现,这篇将讲述二叉树层次遍历输出如何实现以及二叉树前序遍历输入的两种情况. 定义结构体 struct BiNode{char data;BiN ...
- 二叉树层次遍历:队列
二叉树层次遍历 二叉树层次遍历的基本算法在本文中不提及.本文内容为,在二叉树层次遍历中,为何选用队列这样一种数据结构. 不使用额外数据结构 首先,假设我们不使用额外的数据结构,只使用 1 个指针: 访 ...
- (数据结构)二叉树层次遍历
二叉树层次遍历 二叉树层次遍历的实现思想是:通过队列数据结构,从树的根结点开始,依次将其左孩子和右孩子入队:而后每次队列中一个结点出队,都将其左孩子和右孩子入队,直到树中所有结点都出队,出队结点的先后 ...
- 二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)
二叉树的层次遍历同时涉及到树和队列两种数据结构的操作,因此大厂很喜欢用来作为面试的热身题.作者不少去腾讯的小伙伴,都反映,这种题一定要非常熟练,不然会被直接pass. 1 题目描述 给定一个二叉树,按 ...
- 二叉树层次遍历c语言_[LeetCode] 107. 二叉树的层次遍历 II
题目链接 : https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/ 题目描述: 给定一个二叉树,返回其节点值自底 ...
最新文章
- 1199: 房间安排
- Linux虚拟机创建后如何进行登录(Windows Azure)
- 国内好用的5款软件测试管理工具
- python小游戏系列井字棋,儿时的回忆
- C#常用类库(100多个)
- tornado 简易教程
- C/C++ ltoa函数 - C语言零基础入门教程
- 2-2hadoop概述
- Shell自动上传下载文件到SFTP服务器
- Openstack Python 源代码的路径
- Mike and Cellphone
- 此计算机里有旧的MF驱动程序,[讲解]手动删除旧的打印机驱动程序
- [Google] 再见 SharedPreferences 拥抱 Jetpack DataStore
- @Resource注解
- 2019安徽省程序设计竞赛 D自驾游 题解
- Java 已知直角三角形周长,求整数边
- ICPC北美中部赛区资格赛总结
- 7 操作系统之DLL文件
- java jstat m ccs_jstat命令详解
- java 学习之 字符反写