leetcode 102 二叉树的层次遍历

二叉树?层次遍历!

题目:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

例子:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]

题目分析

层次遍历

  • 从上到下
  • 从左到右

按顺序保存每个结点 --> 队列(先进先出)!

思路分析
变量作用
queue<TreeNode*> now保存现在遍历的层的所有结点
queue<TreeNode*> next保存要遍历的下一层的所有结点
TreeNode* temp当前遍历的结点
vector layer当前层的结点信息

过程:
设置两个队列 nownext
now 初始化为根结点
当 now 或 next 为非空
now非空
遍历now
now中结点的孩子结点 ==> 存储入next中
now中的结点存储入 layer
now如果为空
遍历next (即下一层)
next中结点的孩子结点 ==> 存储入now中
next中的结点存储入 layer

layer存储入ans

代码如下:

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        if(!root) return {};
        queue<TreeNode*> now{{root}};
        queue<TreeNode*> next;
        vector<vector<int>> ans;
        while (!now.empty()||!next.empty()) {
            TreeNode* temp; 
            vector<int> layer;
            if(!now.empty()) { 
                while (!now.empty()) {             //遍历当前层
                    temp = now.front();
                    now.pop();
                    if(temp->left) next.push(temp->left);      //孩子结点存储入下一层
                    if(temp->right) next.push(temp->right);
                    layer.push_back(temp->val);
                }
            }
            else {
                while (!next.empty()) {
                    temp = next.front();
                    next.pop();
                    if(temp->left) now.push(temp->left);
                    if(temp->right) now.push(temp->right);
                    layer.push_back(temp->val);
                }
            }
            ans.push_back(layer);
        }
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值