因为原书中的队列中存储的是 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