目录
题目:剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
写在最后:
题目:剑指 Offer 32 - I. 从上到下打印二叉树 - 力扣(Leetcode)
题目的接口:
/**
* 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) {
}
};
解题思路:
这道题让我们遍历二叉数,然后打印,
题目要求返回的是一个数组,
一开始遍历二叉树我第一个想到的是递归,
但很明显递归在这道题不好用,
那就只能用迭代去做,
我们可以利用队列先进先出的特性来实现遍历:
根据题意,我们需要从上到下遍历二叉数,
1. 将二叉树自上而下每一个节点指针入队;
2. 循环出队,出队时push_back进vector;
3. 当队列为空时,证明打印完成了,返回打印数组即可。
代码:
/**
* 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(root == nullptr)
{
return {};
}
//建一个队列存放二叉树节点
queue<TreeNode*> q;
vector<int> ans;
//第一层的根节点
q.push(root);
//一直出队,直到队列为空
while(!q.empty())
{
//记录队头
TreeNode* cur = q.front();
//将队头出队
q.pop();
//打印二叉树每一个节点的值
ans.push_back(cur->val);
//二叉数的每一层所有节点都push进队列
if(cur->left != nullptr)
{
q.push(cur->left);
}
if(cur->right != nullptr)
{
q.push(cur->right);
}
}
return ans;
}
};
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。