层次遍历
顾名思义,从上到下,从左到右。一层一层的来
(文末有一个例子1,2,3,45,6,7)
实现思路
利用队列的先进先出的性质,我们先便访问到某一节点,再讲其左右子节点存入队列中,访问的节点一定要弹出,当然为节点为空就别进队了。当队列为空时我们也就进子树遍历完了。
代码实现(加入先序遍历进行验证)
#include<bits/stdc++.h>
using namespace std;
typedef struct BiTNode {
char data;
struct BiTNode* lchild, * rchild;
}BiTNode,*BiTree;
void Cr_BiTree(BiTree& B)
{
char ch;
cin >> ch;
if (ch == '#')
{
B = nullptr;
}
else
{
B = new BiTNode;
B->data = ch;
Cr_BiTree(B->lchild);
Cr_BiTree(B->rchild);
}
}
void show(BiTree B)
{
if (B != nullptr)
{
show(B->lchild);
show(B->rchild);
cout << B->data;
}
}
void Le_find(BiTree B)
{
queue<BiTree>team;
if (B == nullptr)
{
return;
}
team.push(B);
while (!team.empty())
{
BiTree temp = team.front();
team.pop();
cout << temp->data;
if (temp->lchild != nullptr)
{
team.push(temp->lchild);
}
if (temp->rchild != nullptr)
{
team.push(temp->rchild);
}
}
}
int main()
{
BiTree B;
Cr_BiTree(B);
show(B);
cout << endl;
Le_find(B);
return 0;
}
实例
1
2
4
#
#
5
#
#
3
6
#
#
7
#
#