题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ #include <stack> #include <vector> using namespace std; class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pRoot TreeNode类 * @return int整型vector<vector<>> */ vector<vector<int> > Print(TreeNode* pRoot) { // write code here vector<vector<int> > res; if (pRoot == nullptr) return res; stack<TreeNode*> levels[2]; int current = 0; int next = 1; levels[current].push(pRoot); while (!levels[0].empty() || !levels[1].empty()) { vector<int> levelValues; while (!levels[current].empty()) { TreeNode *pNode = levels[current].top(); levels[current].pop(); levelValues.push_back(pNode->val); if (current == 0) { if (pNode->left != nullptr) levels[next].push(pNode->left); if (pNode->right != nullptr) levels[next].push(pNode->right); } else { if (pNode->right != nullptr) levels[next].push(pNode->right); if (pNode->left != nullptr) levels[next].push(pNode->left); } } res.push_back(levelValues); levelValues.clear(); if (levels[current].empty()) { printf("\n"); current = 1 - current; next = 1 - next; } } return res; } };