问题描述
解决思路
依次遍历每一层,把当前层的节点值都加入到当前层的数值结果数组中
同时把当前层所有下层子节点加入到下层节点队列
重复执行以上过程
实现代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
#include <deque>
class Solution {
public:
deque<TreeNode*> levelOrderImpl(deque<TreeNode*>& q, vector<int>& result)
{
deque<TreeNode*> nextLevelNodes;
while(!q.empty())
{
TreeNode* node = q.front();
result.push_back(node->val);
if(node->left != nullptr)
{
nextLevelNodes.push_back(node->left);
}
if(node->right != nullptr)
{
nextLevelNodes.push_back(node->right);
}
q.pop_front();
}
return nextLevelNodes;
}
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
if(root == nullptr)
{
return result;
}
deque<TreeNode*> treeNodeQ;
treeNodeQ.push_back(root);
while(!treeNodeQ.empty())
{
vector<int> levelElements;
treeNodeQ = levelOrderImpl(treeNodeQ, levelElements);
result.push_back(levelElements);
}
return result;
}
};