从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
解题思路:
层序遍历二叉树,循环把每层的结点全部存入数组,再把数组存入存储数组的数组。
算法流程:
1.创建存储数组的数组res
2.如果树为空,返回res(为空)
3.创建队列q,并且把树的根结点存入队
4.循环直到队列为空
创建数组tmp
遍历该层每个结点
创建结点node存储队头元素
把node的值存入数组
队头元素出队
如果node的左孩子存在
则入队
如果node的右孩子存在
则入队
把数组tmp存入res
5.返回res
代码:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
if(root==nullptr) return res;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()) {
vector<int> tmp;
for(int i=q.size();i>0;i--) {
TreeNode* node=q.front();
tmp.push_back(node->val);
q.pop();
if(node->left!=nullptr)
q.push(node->left);
if(node->right!=nullptr)
q.push(node->right);
}
res.push_back(tmp);
}
return res;
}
};
运行步骤:
3
/ \
9 20
/ \
15 7
3入队
node=3,3出队,tmp:[3],9,20入队
res[[3]]
node=9,9出队,tmp:[9]
node=20,20出队,tmp:[9 20],15,7入队
res[[3] [9 20]]
node=15,15出队,tmp:[15]
node=7,7出队,tmp:[15 7]
res[[3] [9 20] [15 7]]