队列实现的基本思路:遍历从根节点开始,首先将根节点入队,然后执行循环:节点出队,访问(访问)根节点,将左儿子入队,将右儿子入队,直到队列为空停止。
这种遍历方式的结果是将二叉树从上到下,从左至右一层一层的遍历,即层序遍历,代码实现如下:
void LevelOrderTraversal(BinTree BT)
{
BinTree T;
Queue Q; //声明一个队列
if (BT == NULL)
return; //如果树为空,直接返回
Q = CreatQueue(MAX_SIZE); //创建并初始化队列
AddQ(Q, BT); //将根节点入队
while (!IsEmpty(Q))
{
T = DeleteQ(Q); ��� //节点出队
printf("%d\n", T->Data); //访问出队的节点
if (T->Left) AddQ(Q, T->Left); //若左儿子不为空,将其入队
if (T->Right) AddQ(Q, T->Right) //若右儿子不为空,将其入队
}
}
理解上述四种二叉树遍历方式后,不妨来小试牛刀:List Leaves, Tree Traversals Again.
在Java中实现的二叉树结构