题意
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
解题思路
- 题目要求的二叉树的 从上至下 打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)。
- BFS 通常借助 队列 的先入先出特性来实现。
算法流程:
- 特例处理: 当树的根节点为空,则直接返回空列表
[]
; - 初始化: 打印结果列表
res = []
,包含根节点的队列queue = [root]
; - BFS 循环: 当队列
queue
为空时跳出;- 出队: 队首元素出队,记为
temp
; - 打印: 将
temp->val
添加至列表 res尾部; - 添加子节点: 若 temp的左(右)子节点不为空,则将左(右)子节点加入队列
queue
;
- 出队: 队首元素出队,记为
- 返回值: 返回打印结果列表
res
即可。
C++实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution
{
public:
vector<int> levelOrder(TreeNode* root)
{
if(nullptr==root)
return {};
vector<int> res;
queue<TreeNode*> que;
que.push(root);
while(!que.empty())
{
TreeNode* temp = que.front();
que.pop();
res.push_back(temp->val);
if(temp->left)
que.push(temp->left);
if(temp->right)
que.push(temp->right);
}
return res;
}
};