题目描述:
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
方法1:使用队列实现
主要思路:
(1)借助队列,在输出当前层的时候,将其下一层的内容从队尾压入,弹出当前结点时,先压入当前结点的左子树,再压入右子树;
(2)使用一个中间变量,记录每一层的数量,这样实现每次只从队列中输出一层;
/**
* 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<vector<int>> levelOrder(TreeNode* root) {
if(root==NULL)
return vector<vector<int>> ();
vector<vector<int>> res;
vector<int> tmp_vec;
queue<TreeNode*> q;
q.push(root);//初始化队列
int cur_size=0;//记录当前层的大小
TreeNode* tmp=NULL;
while(!q.empty()){//队列非空,则一直输出
cur_size=q.size();//获得当前层的大小
while(cur_size--){//将当前层输出
tmp=q.front();
q.pop();
tmp_vec.push_back(tmp->val);
//将当前结点的左右子树压入队列,既相当于将下一层压入队列
if(tmp->left){
q.push(tmp->left);
}
if(tmp->right){
q.push(tmp->right);
}
}
//将当前层的结果压入结果中,并清空当前vector中的内容
res.push_back(tmp_vec);
tmp_vec.clear();
}
return res;
}
};