题目大意
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
解题思路
使用队列结构,按顺序将某个节点的左右节点放入队列中。由于每一层需要单独放在一个数组中,因此在打印某一层的节点时,需要先知道queue中的数量(就是当前层的节点数,因为之前层的节点都已经被弹出了)。对于当前层,我们从queue中仅弹出layerNums个Node,且每弹出一个Node,将左右节点放入queue中(因为我们之前记录了个数,因此新加入的下一层的Node在本次打印中不会弹出)。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode *> myQueue;
TreeNode * tmp;
vector<int> layerNums;
int length = 0;
while(!myQueue.empty()){
length = myQueue.size();
for(int i = 0; i < length; ++i){
tmp = myQueue.front(); myQueue.pop();
layerNums.push_back(tmp->val);
if(tmp->left){
myQueue.push(tmp->left);
}
if (tmp->right){
myQueue.push(tmp->right);
}
}
res.push_back(layerNums);
layerNums.clear();
}
return res;
}
};