6-1 Level-order Traversal (25分)
题意
编写一个例程以“层次顺序”列出二叉树的节点。列出根节点,然后列出深度为1的节点,然后是深度为2的节点,依此类推。你必须用线性时间来做这个。
思路
先判断数是否为空树,空树则无需打印,直接return;
由于最大节点数是MaxTree,我们先开一个结构体指针数组tree[MaxTree],由于树现在已经非空,我们让tree[0]指向第一个节点,
当head < taill时,说明树的节点还没被访问完,以此为循环条件,先打印此时的结点值(直到打印到最后一个节点,此时tail不再增加,head++,使得head == tail,循环结束),再判断节点左右子树是否为空,一层层用tail把后面的树节点接到数组里。
代码
void Level_order ( Tree T, void (*visit)(Tree ThisNode) ){
if(T == NULL)
return ;
Tree tree[MaxTree];
int head = 0, tail = 1;
tree[0] = T;
while(head < tail){
(*visit)(tree[head]);
if(tree[head]->Left)
tree[tail++] = tree[head]->Left;
if(tree[head]-