给定一颗二叉树,将这棵二叉树分层打印,层与层之间有空行。
例如:
输出:
A
B C
D E
F G H
主要实现函数如下:
void visitByLevel(BiNode * head)
{
List *pre=NULL;
List *post=NULL;
List *current=NULL;
if(head!=NULL)
{
List *temp=(List *)malloc(sizeof(List));
temp->node=head;
temp->next=NULL;
pre=temp;
post=temp;
temp=(List *)malloc(sizeof(List));
temp->node=NULL;
temp->next=NULL;
post->next=temp;
post=post->next;
while(pre!=NULL)
{
current=pre;
if(current->node==NULL)
{
if(current->next==NULL)
{
printf("\n");
break;
}
temp=(List *)malloc(sizeof(List));
temp->node=NULL;
temp->next=NULL;
post->next=temp;
post=post->next;
printf("%\n");
pre=pre->next;
free(current);
current=NULL;
}
else
{
if(current->node->left!=NULL)
{
temp=(List *)malloc(sizeof(List));
temp->node=current->node->left;
temp->next=NULL;
post->next=temp;
post=post->next;
}
if(current->node->right!=NULL)
{
temp=(List *)malloc(sizeof(List));
temp->node=current->node->right;
temp->next=NULL;
post->next=temp;
post=post->next;
}
printf("%d ",pre->node->data);
pre=pre->next;
free(current);
current=NULL;
}
}
}
}
思想是用链表模拟队列,用空节点表示同一行的节点结束。