一、题目
二、思路
打印奇数层: 从左向右 打印,先左后右 加入下层节点;(根节点为奇数层)
打印偶数层: 从右向左 打印,先右后左 加入下层节点;
三、代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>>res;
if(root==NULL){
return res;
}
deque<TreeNode*>Que;
Que.emplace_back(root);
int flag=1;
while(!Que.empty()){
TreeNode *node=NULL;
int size=Que.size();
res.emplace_back(vector<int>{});
//奇数层
if(flag%2==1){
for(int i=0;i<size;++i){
//从左至右
node=Que.front();
Que.pop_front();
res.back().emplace_back(node->val);
//从左至右
if(node->left){
Que.emplace_back(node->left);
}
if(node->right){
Que.emplace_back(node->right);
}
}
}
//偶数层
else{
for(int i=0;i<size;++i){
//从右至左
node=Que.back();
Que.pop_back();
res.back().emplace_back(node->val);
//从右至左
if(node->right){
//注意
Que.emplace_front(node->right);
}
if(node->left){
Que.emplace_front(node->left);
}
}
}
flag++;
}
return res;
}
};