[劍指offer]從上到下打印二叉樹III——按之字形順序打印二叉樹
題目描述
請實現一個函數按照之字形順序打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類推。
例如:
給定二叉樹: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其層次遍歷結果:
[
[3],
[20,9],
[15,7]
]
提示:
節點總數 <= 1000
解題思路
- 在劍指offer-從上到下打印二叉樹II基礎上,加一個flag,用於判斷是否反轉數組。
- 使用reverse()函數進行反轉。
實現代碼
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>>res;
queue<TreeNode*> que;
que.push(root);
bool flag = false;//標誌位,起初不反轉,爲false
while(!que.empty()){
vector<int>list;
int num = que.size();//隊列大小代表這一層有幾個節點
while(num--){
TreeNode* temp = que.front();//獲得隊列頭節點
que.pop();
if(temp){//節點不爲null時
list.push_back(temp->val);//節點值保存
que.push(temp->left);//左子樹入隊
que.push(temp->right);//右子樹入隊
}
}
if(flag)//爲true時反轉
reverse(list.begin(),list.end());
flag = !flag;//取反
if(!list.empty())//list有可能是[]
res.push_back(list);
}
return res;
}
};