在层次遍历上的一个简单应用
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
// 这道题观察就可以发现,在层次遍历的基础上
// 奇数层不用翻转,偶数层翻转即可
vector<vector<int> > Print(TreeNode* pRoot) {
// 翻转序列的标志
int flag = 1;
std::queue<TreeNode *> queue_;
std::vector<std::vector<int>> res;
if (pRoot == nullptr) {
return res;
}
queue_.push(pRoot);
while (!queue_.empty()) {
int size = queue_.size();
std::vector<int> tmp;
for (int i = 0; i < size; ++i) {
TreeNode *ptr = queue_.front();
queue_.pop();
tmp.push_back(ptr->val);
if (ptr->left) {
queue_.push(ptr->left);
}
if (ptr->right) {
queue_.push(ptr->right);
}
}
if (flag % 2 == 0) {
reverse(tmp.begin(), tmp.end());
}
++flag;
res.emplace_back(std::move(tmp));
}
return res;
}
};