题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
#include <queue>
#include <vector>
class Solution {
public:
//和BM26大同小异。只是添加了一个判断条件,第一行不反转已遍历的队列,偶数列反转已遍历的队列即可
void z_order(TreeNode* Node,vector<vector<int>>&ans){
if(Node == NULL) return;
queue<TreeNode*> q;
q.push(Node);
bool flag = true;
while (!q.empty()) {
vector<int> row;
int n = q.size();
flag = !flag;
for(int i =0;i<n;i++){
TreeNode *temp = q.front();
q.pop();
row.push_back(temp->val);
if(temp->left)
q.push(temp->left);
if(temp->right)
q.push(temp->right);
}
if(flag) reverse(row.begin(),row.end());//通过flag确定是否反转已遍历的队列
ans.push_back(row);
}
}
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > ans;
z_order(pRoot, ans);
return ans;
}
};

查看1道真题和解析