文章目录
1、描述
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回:
[3,9,20,15,7]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
二叉树,层序遍历
3、思路
使用队列queue,
4、notes
5、复杂度
时间:O(N)
空间:O(N)
6、code
/**
* 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) {
queue<TreeNode*>que;
que.push(root);
vector<int>res;
if(!root) return res; // 特判一下,不写不给过空案例: []
while (!que.empty()){
int n = que.size();
while(n--){
auto tem = que.front();
que.pop();
res.push_back(tem->val);
if(tem->left) que.push(tem->left);
if(tem->right) que.push(tem->right);
}
}
return res;
}
};
层序遍历只需要写一次就行
上面的代码是可以左到一层写一次的,下面就直接写到一起了,只是顺序也是一样的,只是没有按照每一层进行划分。
/**
* 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) {
queue<TreeNode*>que;
que.push(root);
vector<int>res;
if(!root) return res; // 特判一下,不写不给过空案例: []
while (!que.empty()){
//int n = que.size();
//while(n--){
auto tem = que.front();
que.pop();
res.push_back(tem->val);
if(tem->left) que.push(tem->left);
if(tem->right) que.push(tem->right);
//}
}
return res;
}
};