题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
方法一:
1.层序遍历到ans矩阵
2.对下表为偶数的矩阵进行反转
3.返回ans
方法二
1.层序遍历
2.在队中弹出时,逆序赋值到temp数组
3.某一层遍历完毕后 将temp放入ans数组
/*
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) {\
// 奇数层 顺序 偶数层 逆序
vector<vector<int>> ans;
if(pRoot == nullptr) return ans;
// 朴素解法1 层序 遍历 偶数数组反转
// 解2 flag 或者ans.size()
queue<TreeNode*> q;
q.push(pRoot);
while(!q.empty()) {
int nodeNumQ = q.size();
// 记录当前的数量 全部出队 且所有当前节点的左右节点入队
vector<int> temp(nodeNumQ, 0);
int index1 = 0, index2 = nodeNumQ - 1;
while(nodeNumQ--) {
if(q.front()->left) {
q.push(q.front()->left);
}
if(q.front()->right) {
q.push(q.front()->right);
}
// 奇数层 顺序
if(ans.size() % 2 == 1) {
temp[index2--] = q.front()->val;
}
// 偶数层 逆序
else {
temp[index1++] = q.front()->val;
}
q.pop();
}
ans.emplace_back(temp);
}
return ans;
}
};
查看13道真题和解析

