题目要求
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
思路
创建一个队列q,用来存储节点,创建一个一维数组ans,用来存储返回值,处理特殊情况,如果根节点为空,直接返回,否则如果不为空,我们可以将root插入到队列中,建一个循环,如果队列不为空,我们就一直循环,计算队列的元素个数为sz,我们根据元素个数for循环,取出队顶的元素,将队顶元素的val值存入一维数组,然后如果这个节点的左子树和右子树不为空,插入到队列当中,for循环结束,返回一维数组。
代码实现
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
queue<TreeNode*> q;
vector<int> ans;
if (root == nullptr)
return ans;
q.push(root);
while (!q.empty())
{
int sz = q.size();
for (int i = 0; i < sz; i++)
{
TreeNode* node = q.front();
q.pop();
ans.push_back(node->val);
if (node->left)
q.push(node->left);
if (node->right)
q.push(node->right);
}
}
return ans;
}
};