学习目标:广度优先遍历二叉树
我是一个初学者,写这篇博客一是为了增加自己的记忆,以便于以后自己复习,当然希望有大神能对我纠错,嘻嘻。
学习内容:
- [ 1] 广度优先遍历顾名思义,一层一层的输出二叉树每一个节点的信息。就像她一层一层剥开我的洋葱心。
学习步骤:
- 首先应该创建一个队列,而队列里存储的便是二叉树每一个节点的地址。
- 大家看一下代码就能明白。
- 二叉树节点
- 代码不规范,哈哈。
//二叉树节点的结构体
typedef char Elemtype;
typedef struct _Node
{
Elemtype data;
struct _Node *Lchild;
struct _Node *Rchild;
}Node,*PNode;
typedef struct
{
PNode *arr;
int pront;
int rear;
}Queue;
以下方法就不一一写了。
队列的入队: void Push(Queue &Q,PNode P);
队列的初始化: void InitQueue(Queue &Q);
队列的出对: void Pop(Queue &Q,PNode &P);
队列的判断是否为空: bool Empty(Queue Q);
二叉树的创建: void Cratet(PNode &T);
void Strave(PNode T)
{
Queue Q;//定义队列
PNode Temp=NULL;//用来接收队列出来的地址
InitQueue(Q);//初始化队列
if(T)//判断根节点是否为空
{
Push(Q,T);
while(Empty(Q))
{
Pop(Q,Temp);
printf("%c",Temp->data);
if(Temp->Lchild)
{
Push(Q,T->Lchild);
}
if(Temp->Rchild)
{
Push(Q,Temp->Rchild);
}//if
}//while
}//if
}
学习结论:
- 关于二叉树的广度优先遍历,大家应该能明白了。
- 非常简单明白,清晰。
- 广度优先遍历二叉树并不是非一定要从左往右输出,只是习惯而已。