二叉树的层序遍历

1、原理介绍

层序遍历:若树为空,则空操作返回;若不为空,从树的第一层,也就是根节点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对节点逐个访问。
下图所示的例子,按照层序遍历,遍历顺序为:ABCDEFGHI。
这里写图片描述

思路:用队列解决,先进先出!从上到下,从左到右依次将每个数放入到队列中,然后按顺序依次打印就是想要的结果。

队列实现:遍历从根结点开始,首先将根结点入队,然后开始执行循环:结点出队、访问该结点、其左右儿子入队

!!!注意:队列中每个节点应该是存储一个二叉树的指针,这样才能依次依靠指针left和right访问下去。

2、c++实现

#include<iostream>
#include<queue>
using namespace std;
/*二叉树结构体,并且构建了有参构造函数*/
struct BinaryTree{
	int val;
	BinaryTree* left;
	BinaryTree* right;
	BinaryTree(int data)
		:val(data), left(NULL), right(NULL){}
};
 
/*队列实现层序遍历*/
void printTree(BinaryTree* s_arr[])
{
	queue<BinaryTree*> rel;				//定义一个队列,数据类型是二叉树指针,不要仅是int!!不然无法遍历
	rel.push(s_arr[0]);
	while (!rel.empty())
	{
		BinaryTree* front = rel.front();
		cout << front->val<<" ";
		rel.pop();					   //删除最前面的节点
		if (front->left != NULL)	   //判断最前面的左节点是否为空,不是则放入队列
			rel.push(front->left);
		if (front->right != NULL)	   //判断最前面的右节点是否为空,不是则放入队列
			rel.push(front->right);
	}
}

int main()
{
	BinaryTree* s_arr[6];			  //构建二叉树
	s_arr[0] = new BinaryTree(0);
	s_arr[1] = new BinaryTree(1);
	s_arr[2] = new BinaryTree(2);
	s_arr[3] = new BinaryTree(3);
	s_arr[4] = new BinaryTree(4);
	s_arr[5] = new BinaryTree(5);
	s_arr[0]->left = s_arr[1];		//   0
	s_arr[0]->right = s_arr[2];	   //  1   2
	s_arr[1]->left = s_arr[3];    // 3      5
	s_arr[3]->left = s_arr[4];   //4
	s_arr[2]->right = s_arr[5]; //所以层序遍历的结果为:0 1 2 3 5 4
	
	printTree(s_arr);				//层次遍历打印所有节点
	for (int i = 0; i < 6; i++)		//释放所有空间
		delete s_arr[i];
	return 0;
}

参考:https://blog.csdn.net/FX677588/article/details/74276513

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值