二叉树的层序遍历(使用队列实现&&C++)

使用队列实现二叉树的层序遍历,代码简单易懂。

代码中使用智能指针,实现内存自动管理。

使用队列这种数据结构存储二叉树的子节点,用于执行出队、入队操作。

读者可修改代码中创建二叉树节点之间关系的部分,以尝试对不同的二叉树进行遍历,并对比计算结果。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include <memory>
#include <queue>
using namespace std;

// 二叉树的节点
struct BinaryTree
{
	char data;
	std::shared_ptr<BinaryTree> left;
	std::shared_ptr<BinaryTree>  right;
	BinaryTree(char val) :data(val)
	{
		this->left = NULL;
		this->right = NULL;
	}
};

// 二叉树的层序遍历:队列实现
void LayerOrderTraversal(shared_ptr<BinaryTree> bt)
{
	// 如果是空树,直接返回
	if (!bt) return;
	
	// 声明一个队列,存储二叉树的节点
	queue<shared_ptr<BinaryTree>> q;

	// 声明一个二叉树节点的指针,用于访问节点
	shared_ptr<BinaryTree> look;			

	// 头结点先入队
	q.push(bt);	

	while (!q.empty())
	{
		// 访问队列的头部,并将其出队
		look = q.front();	
		cout << look->data << " ";
		q.pop();

		// 如果出队的节点存在左孩子,将左孩子入队
		if (look->left)
			q.push(look->left);	 

		// 如果出队的节点存在右孩子,将右孩子入队
		if (look->right)
			q.push(look->right);
	}
	cout << endl;
}

int main()
{
	// 创建一系列树节点:使用智能指针
	shared_ptr<BinaryTree> a = make_shared<BinaryTree>('a');
	shared_ptr<BinaryTree> b = make_shared<BinaryTree>('b');
	shared_ptr<BinaryTree> c = make_shared<BinaryTree>('c');
	shared_ptr<BinaryTree> d = make_shared<BinaryTree>('d');
	shared_ptr<BinaryTree> e = make_shared<BinaryTree>('e');
	shared_ptr<BinaryTree> f = make_shared<BinaryTree>('f');

	// 创建二叉树节点之间的关系
	a->left = f;
	a->right = d;
	f->left = e;
	f->right = c;
	d->left = b;

	// 层序遍历
	LayerOrderTraversal(a);
	
	system("pause");
	return 0;
}

关于二叉树的先序、中序、后序遍历(递归实现)

谢谢阅读

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值