题目描述
题目描述
- 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。如下图所示二叉树:
- 打印上图中二叉树的结果为:
8
6 10
5 7 9 11
- 二叉树的节点定义如下:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
解题思路
- 针对于此题,题目要求按行打印,即我们需要层次遍历这棵树
- 层次遍历树,使用队列数据结构,以层为单位进行入队,出队并打印
- 按层打印上图二叉树的过程:
步骤 | 操作 | 队列 |
---|---|---|
1 | 打印8 | 6、10 |
2 | 打印6 | 10、5、7 |
3 | 打印10 | 5、7、9、11 |
4 | 打印5 | 7、9、11 |
5 | 打印7 | 9、11 |
6 | 打印9 | 11 |
7 | 打印11 |
- 思路清晰后,我们就可以开始动手写代码了
代码实现
vector<int> PrintFromTopToBottom(TreeNode* root)
{
vector<int> res;
if (root == NULL)
return res;
queue<TreeNode*> q;
q.push(root);
while (!q.empty())
{
TreeNode* tmp = q.front();
q.pop();
res.push_back(tmp->val);
if (tmp->left != NULL)
q.push(tmp->left);
if (tmp->right != NULL)
q.push(tmp->right);
}
return res;
}