关于二叉树的层次遍历的花样(c++实现)
生活随笔
收集整理的這篇文章主要介紹了
关于二叉树的层次遍历的花样(c++实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
花樣變形1::二叉樹層次遍歷但是分層打印
分析:與普通打印多了一個分層打印,其實只要在在層次遍歷中多設置一個標記變量即可
代碼如下:
//二叉樹的層次遍歷
void levelTravel(BTNode *bt)
{if (bt == NULL){return;}queue<BTNode *> nodeQueue;nodeQueue.push(bt);nodeQueue.push(NULL); //放入空節點,作為層的結束符while (nodeQueue.size()){BTNode *pNode = nodeQueue.front(); //取隊首元素nodeQueue.pop(); //必須出隊列if (pNode) //該節點非空{cout << pNode->data << ' ';if (pNode->lchild) //左孩子{nodeQueue.push(pNode->lchild);}if (pNode->rchild) //右孩子{nodeQueue.push(pNode->rchild);}}//如果結點為空并且隊列非空,則是一行訪問結束,下一行的入隊列結束,因此壓入一個空指針 //若隊列也是空,則說明已訪問完畢else if (nodeQueue.size()){nodeQueue.push(NULL);cout << endl;}}
}
可以看出我們通過設置了空節點來表示一層的結束,這樣就可以很好的實現分層打印。
花樣變形2:將二叉樹分層打印的同時,將每層的數據保存下來
void levelTravel2(BTNode *bt)
{vector<vector<int>> result; //存放所有層的節點vector<int> cur; //存放每一層的節點if (bt == NULL){return;}queue<BTNode *> nodeQueue;nodeQueue.push(bt);nodeQueue.push(NULL); //放入空節點,作為層的結束符while (nodeQueue.size()){BTNode *pNode = nodeQueue.front(); //取隊首元素nodeQueue.pop(); //必須出隊列if (pNode) //該節點非空{cout << pNode->data << ' ';cur.push_back(pNode->data);if (pNode->lchild) //左孩子{nodeQueue.push(pNode->lchild);}if (pNode->rchild) //右孩子{nodeQueue.push(pNode->rchild);}}//如果結點為空并且隊列非空,則是一行訪問結束,下一行的入隊列結束,因此壓入一個空指針 //若隊列也是空,則說明已訪問完畢else {result.push_back(cur);cur.resize(0);if (nodeQueue.size())nodeQueue.push(NULL);cout << endl;}}//for (int i = 0; i < result.size(); i++)//{// vector<int>a = result[i];// for (int j = 0; j < a.size(); j++)// {// //cout << a[j] << ' ';// printf("%c ", a[j]);// }// cout << endl;//}
}
轉載請注明出處:
CSDN:樓上小宇_home:http://blog.csdn.net/sty945
總結
以上是生活随笔為你收集整理的关于二叉树的层次遍历的花样(c++实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 只要5分钟用数据可视化带你看遍11月份新
- 下一篇: 关于python导入模块和package