前两天说过二叉树的前序遍历、中序遍历、后续遍历,把剩下的也都说了吧,二叉树遍历系列四,层次遍历。
题目链接:
二叉树的层次遍历 - 力扣(LeetCode)leetcode-cn.com题目描述:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3
/
9 20
/
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
解题思路:
不同于之前前中后序使用栈的方法,层序遍历我们使用队列。如果一个节点有左右孩子,就把它的左右孩子 push 到队列中。
代码如下:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root) return {};
vector<vector<int>> res;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()){
vector<int> v;
int size = q.size();
for(int i = 0; i < size; ++i){
TreeNode* p = q.front();
v.push_back(p->val);
if(p->left) q.push(p->left);
if(p->right) q.push(p->right);
q.pop();
}
res.push_back(v);
}
return res;
}
};
leetcode 里还有俩题也是关于二叉树的层次遍历的,一是二叉树的层次遍历 II,是把二叉树的元素按层次的顺序自底向上输出一遍,其实就是把本题最后的结果倒序一下就行了。二是二叉树的锯齿形层次遍历,就是先从左到右,再从右到左,注意按照奇偶性,倒序每一行的元素就行,其他部分和本题完全一致,所以就不单独写一篇了。
如果有任何疑问,欢迎提出。如果有更好的解法,也欢迎告知。