使用队列实现二叉树的层序遍历,代码简单易懂。
代码中使用智能指针,实现内存自动管理。
使用队列这种数据结构存储二叉树的子节点,用于执行出队、入队操作。
读者可修改代码中创建二叉树节点之间关系的部分,以尝试对不同的二叉树进行遍历,并对比计算结果。
#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;
}
关于二叉树的先序、中序、后序遍历(递归实现)
谢谢阅读