目录
102. 二叉树的层序遍历
107. 二叉树的层序遍历 II
103. 二叉树的锯齿形层序遍历
429. N 叉树的层序遍历
102. 二叉树的层序遍历
给你二叉树的根节点
root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode*> q;
if(root)
q.push(root);
while(!q.empty())
{
vector<int>temp;
int size = q.size();
while(size--)
{
TreeNode* cur = q.front();
q.pop();
temp.push_back(cur->val);
if(cur->left)
q.push(cur->left); //左右孩子存在则入队列
if(cur->right)
q.push(cur->right);
}
res.push_back(temp);
}
return res;
}
};
107. 二叉树的层序遍历 II
给你二叉树的根节点
root
,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)class Solution { public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> res; queue<TreeNode*> q; if(root) q.push(root); while(!q.empty()) { vector<int>temp; int size = q.size(); while(size--) { TreeNode* cur = q.front(); q.pop(); temp.push_back(cur->val); if(cur->left) q.push(cur->left); //左右孩子存在则入队列 if(cur->right) q.push(cur->right); } res.push_back(temp); } reverse(res.begin(), res.end()); return res; } };
103. 二叉树的锯齿形层序遍历
给你二叉树的根节点
root
,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> res; queue<TreeNode*> q; if(root) q.push(root); int flag = 0; while(!q.empty()) { int size = q.size(); vector<int> temp; while(size--) { TreeNode* cur = q.front(); q.pop(); temp.push_back(cur->val); if(cur->left) q.push(cur->left); if(cur->right) q.push(cur->right); } if(flag%2==1) // 多加入一个flag标志位判断是从左往右还是从右往左 reverse(temp.begin(), temp.end()); flag+=1; res.push_back(temp); } return res; } };
429. N 叉树的层序遍历
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/n-ary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> res; // 存放返回结果
queue<Node*> q;
if(root)
q.push(root);
while(!q.empty())
{
vector<int> temp;
int size = q.size(); //获取当前队列中元素个数
while(size--) //逐层遍历,将每一层的元素放入同一个数组,最终将该层元素数组放入res中
{
Node* cur = q.front(); //访问size个队头元素
q.pop();
temp.push_back(cur->val);
for(Node* e : cur->children) //孩子全部入队列
{
q.push(e);
}
}
res.push_back(temp);
}
return res;
}
};