树的层序遍历

因为原书中的队列中存储的是 int 类型的数据,而我们层序遍历用到的队列中应该存储树的节点,所以稍微改了一下队列的结构,使其存储的 ElementType 为树的节点。

期间,出了一点小 Bug,本来的队列的源码兼容性是很强的,之所以用 ElementType 也是为了将来可以随意将队列改装成可以存储其它数据的数据结构,但是,今天在改装的时候,CLion 中 ElementType 和 MakeEmpty() 函数都给我报了错,找了几分钟,才发现是在树的代码中出现了同名的变量,之后改过来就好了。现在在这里记录以下。

void LevelOrderTraversal(SearchTree T) {
    Queue Q;
    SearchTree ST;
    if (!T) return; /* 如果是空树就直接返回 */
    Q = CreateQueue();
    Enqueue(T, Q); /* 将根节点入队 */
    while (!IsEmpty(Q)) {
        ST = FrontAndDequeue(Q);
        printf("%d ", ST->Element); /* 访问取出队列的节点 */
        if (ST->Left) Enqueue(ST->Left, Q);
        if (ST->Right) Enqueue(ST->Right, Q);
    }
}

附注:整个的可运行的代码链接:https://www.cnblogs.com/fanlumaster/p/13833330.html

原文地址:https://www.cnblogs.com/fanlumaster/p/13833335.html