主要看队列的应用与了解,就是利用先进先出的特点。先把每个节点塞入队列,再根据先进先出的特点来把自身值传入一维vector数组中去。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > Print(TreeNode* pRoot) {
// write code here
vector<vector<int>>res;
queue<TreeNode*>q;
if(pRoot==nullptr)
{
return res;
}
q.push(pRoot);
int flag = 1;
vector<int>temp;
while(!q.empty())
{
int size = q.size();
while(size--)
{
TreeNode* tmp = q.front(); // 队头元素
q.pop();
temp.push_back(tmp->val);
if(tmp->left)
{
q.push(tmp->left);
}
if(tmp->right)
{
q.push(tmp->right);
}
}
if(flag%2==0)
{
std::reverse(temp.begin(), temp.end()); //反转容器
res.push_back(temp);
}
else {
res.push_back(temp);
}
temp.clear();
flag++;
}
return res;
}
};
鄙人不才,可能解释的比较烂,为了方便理解,拿出牛客网上的题解图来解答以便看官更好理解流程
每次队头出队列,出之前留下他的左右根节点。