1:
void LevelorderTraversal( BinTree BT ){
BinTree Queue[1000]; //数据不大,1000够用
int top = -1;
int tail = -1;
if(BT)Queue[++tail] = BT;
while(top<tail){
BinTree bt = Queue[++top];
printf(" %c",bt->Data);
if(bt->Left){
Queue[++tail] = bt->Left;
}
if(bt->Right){
Queue[++tail] = bt->Right;
}
}
}
错误的一次:
void LevelorderTraversal( BinTree BT ){
BinTree bt[1000];
int top=0,tail=-1;
if(BT)bt[top]=BT;
while(top>tail){
printf(" %c",bt[++tail]->Data);
if(bt[tail]->Left)
bt[++top]=bt[tail]->Left;
if(bt[tail]->Right){
bt[++top]=bt[tail]->Right;
}
}
}
当为空树时,top任然大于tail,像1中那样初设tail,top相等,只有在不是空树时给tail加一,才能进入循环,就不会出错。