给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
方法:使用队列,保存两个参数,第一个参数是节点,第二个参数是该节点是第几层。
(1)首先创建列表res,如果二叉树为空,直接返回res。
(2)创建一个队列,两个参数,第一个是节点,第二个是节点位于的层数。
(3)将根节点放入队列。
(4)循环,队列不为空。
(5)将队列的第一个元素取出来,第一部分是节点,第二部分是层数level。
(6)判断当前res有没有level层,即res中有几个元素,没有创建。有的话直接放入res。
(7)然后看有无左右孩子,如果有,分别入队,并且层数+1.
/**
* 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) {
vector<vector<int>> res;
if(!root) return res;
queue<pair<TreeNode*, int>> q;
q.push(make_pair(root,0));
while(!q.empty()){
TreeNode *node = q.front().first;
int level = q.front().second;
q.pop();
if(level == res.size())//说明res中还没有这组元素需要创建
res.push_back( vector<int>() );
res[level].push_back(node->val);
if(node->left) q.push(make_pair(node->left, level + 1));
if(node->right) q.push(make_pair(node->right, level + 1));
}
return res;
}
};