题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
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; } };