版权声明:所有的博客都是个人笔记,交流可以留言。未经允许,谢绝转载。。。 https://blog.csdn.net/qq_35976351/article/details/88607138
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题思路
层次序遍历,然后存储到vector
中,之后对偶数层的进行逆序即可。注意新定义了一个数据结构:
struct Node {
TreeNode* ptr {nullptr};
int depth {0};
};
只是多记录了一个层,用于对vector
进行扩容。
AC代码
class Solution {
public:
vector<vector<int>> Print (TreeNode* pRoot) {
vector<vector<int>> res;
if (pRoot == nullptr) {
return res;
}
queue<Node> que;
Node node;
node.ptr = pRoot;
node.depth = 0;
que.push (node);
while (!que.empty()) {
Node t = que.front();
que.pop();
if (res.size() < t.depth + 1) { // 层数扩容
vector<int>vec;
res.push_back (vec);
}
res[t.depth].push_back (t.ptr->val);
if (t.ptr->left != nullptr) {
node.ptr = t.ptr->left;
node.depth = t.depth + 1;
que.push (node);
}
if (t.ptr->right != nullptr) {
node.ptr = t.ptr->right;
node.depth = t.depth + 1;
que.push (node);
}
}
// 奇数层逆序
for (int i = 0; i < res.size(); ++i) {
if (i % 2 == 1) {
reverse (res[i].begin(), res[i].end());
}
}
return res;
}
struct Node {
TreeNode* ptr {nullptr};
int depth {0}; // 扩容vector用的
};
};