剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
题解
- 相当于I 和 II 这个相当于是多维护一个bool标记 ;
- 每次遍历完队列中的所有点表示一层,更新标记
/**
* 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 ;
queue<TreeNode*> q ;
q.push(root) ;
bool isFan = false ;
while(!q.empty()){
vector<int> temp ;
for(int i = q.size() ; i ; i -- ){
auto node = q.front() ;
q.pop() ;
temp.push_back(node -> val) ;
if(node -> left != NULL) q.push(node -> left) ;
if(node -> right != NULL) q.push(node -> right) ;
}
isFan = !isFan ; //每遍历完一次更新
if(!isFan){
reverse(temp.begin(),temp.end()) ;
}
res.push_back(temp) ;
}
return res ;
}
};
反转的方式二:
if(!isFan){
res.push_back(vector<int>(temp.rbegin(), temp.rend()));
}else{
res.push_back(temp) ;
}