利用循环操作,将树的当前层的每个节点放在队列中,然后再将当前层的每个节点的孩子节点放在队列中,然后取出位于队列前面的当前层的所有节点,只留下这些节点的孩子节点,然后进行下一次循环
具体如下:
void BFT() { //该函数的作用是使用广度优先遍历二叉树
cout << endl << "开始遍历" << endl;
queue<node*>Q;
Q.push(root);
datatype a;
a = Q.front()->data;
cout << a;
Q.push(Q.front()->Lchild);
Q.push(Q.front()->Rchild);
Q.pop();
while (1) {
//system("PAUSE");
int num; //用来记录队列里元素的数量
num = Q.size();
if (num == 0) {
break;
}
else {
cout << endl;
int b = 0;
while (b < num) {
//system("PAUSE");
node* c;
c = Q.front();
cout << c->data <<" ";
if (c->Lchild != NULL)Q.push(c->Lchild);
if (c->Rchild != NULL)Q.push(c->Rchild);
Q.pop();
b++;
}
}
}
cout << endl << "遍历结束" << endl;
}