剑指OFFER_按之字形顺序打印二叉树
剑指OFFER_按之字形顺序打印二叉树
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路
这道题和之前的层序遍历特别相似,简直就是题目的翻版,本着轮子不用重复造的想法,直接把代码复制过来修改;
如果直接修改就很简单了,先按照层序遍历的思路,得到一个二维数组,然后对此数组每隔一个位置逆序一次即可;
层序遍历的思路可以我的这道题的思路:
https://www.cnblogs.com/sakurapiggy/p/13201491.html
代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
typedef vector<int> vecint;
typedef vector<vecint> v2ecint;
class Solution {
public:
int maxDeep;
v2ecint ans;
void dfs(TreeNode* node, int deep) {
if (!node) {
return;
}
if (deep == maxDeep) {
vecint vec;
vec.push_back(node->val);
ans.push_back(vec);
++maxDeep;
} else {
ans[deep].push_back(node->val);
}
dfs(node->left, deep+1);
dfs(node->right, deep+1);
}
vector<vector<int> > Print(TreeNode* pRoot) {
maxDeep = 0;
dfs(pRoot, 0);
bool flag = false;
for (vecint &v:ans) {
if (flag) {
flag = false;
reverse(v.begin(), v.end());
} else {
flag = true;
}
}
return this->ans;
}
};