[剑指offer]从上到下打印二叉树III——按之字形顺序打印二叉树
剑指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;
}
};