/*二叉树的层序遍历*/
typedef struct TreeNode *BinTree;
typedef BinTree Position;
struct TreeNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
/*
二叉树遍历的核心问题:二维结构的线性化
访问左儿子后,右儿子结点的处理:
·需要一个存储 结构保存暂时不访问的结点
·存储结构:堆栈、队列
*/
/*队列实现:遍历从根结点开始,首先将根结点入队,然后开始执行循环:结点出队,访问该结点,其左右儿子入队*/
void LevelOrderTraversal(BinTree BT)
{
Queue Q;
BinTree T;
if(!BT) return; //若是空树则直接返h回
Q=CreatQueue(MaxSize); //创建并初始化队列Q
AddQ(Q,BT);
while(!IsEmptyQ(Q)) {
T=DeleteQ(Q);
printf("%5d",T->Data); //访问取出队列结点
if(T->Left) AddQ(Q,T->Left);
if(T->Right) AddQ(Q,T->Right);
}
}
二叉树的层序遍历
最新推荐文章于 2023-09-20 20:05:30 发布