1. 程式人生 > >bfs實現二叉樹按行有序輸出

bfs實現二叉樹按行有序輸出

今天做了一道“南湖旁的樹”,考察到二叉樹層次遍歷(寬度優先),一般用佇列可實現,但要求按行輸出。在書上的程式都是依次便利而沒有按行輸出,修改了一番,每次佇列非空就都pop出來再push新的。因為二叉樹嘛,最多也就pop兩次,而且題目要求每行從小到大,還需要排序,也簡單,就兩個比較。

void bfs(){
int m,n,tmp;
int i=1;
q.push(1);
while(!q.empty())
{
cout<<i++<<":";
m=q.front();q.pop();
if(!q.empty()){
n=q.front();q.pop();
if(n>m){tmp=n;n=m;m=tmp;}
cout<<n<<" ";
if(v[n].left) q.push(v[n].left);
if(v[n].right) q.push(v[n].right);
}
cout<<m;
if(v[m].left) q.push(v[m].left);
if(v[m].right) q.push(v[m].right);
cout<<"\n";
}

注:程式用的是陣列模擬二叉樹而沒用指標,因為根據原題陣列會簡單點,但思想是一樣的。框架中佇列的應用簡直精髓!