浙江大学数据结构(3.3.3层序遍历)

二叉树遍历的核心问题:二维结构的线性化

  • 从结点访问其左、右儿子结点
  • 访问左儿子后,右儿子结点怎么办?
  1. 需要一个存储结构保存暂时不访问的结点
  2. 存储结构:堆栈、队列

层次遍历

  • 队列实现:遍历从根结点开始,首先将根结点入队,然后开始执行循环:结点出队、访问该结点、其左右儿子入队

层序基本过程:先根结点入队,然后:

  1. 从队列取出一个元素
  2. 访问该元素所指结点
  3. 若该元素所指结点的左、右孩子结点非空,则将其左、右孩子的指针顺序入队
void LevelOrderTraversal(BinTree BT)
{
    Queue Q; BinTree T;
    if (!BT) return;
    Q=CreatQueue(MaxSize);
    Add(Q,BT);
    while (!isEmptyQ(Q))
    {
     T=Delete(Q);
     printf("%d\n",T->Data);
     if (T->Left)  AddQ(Q,T->Left);
     if (T->Right)  AddQ(Q,T->right);
    }
 
}

猜你喜欢

转载自blog.csdn.net/weixin_42681308/article/details/89462107