您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页力扣双指针算法题目:二叉树的层序遍历(BFS)

力扣双指针算法题目:二叉树的层序遍历(BFS)

来源:伴沃教育


1.题目

2.思路解析

对二叉树进行层序遍历,顾名思义,就是按每一层的顺序对二叉树一层一层地进行遍历

思路如下

从第一层开始,先将二叉树地头放入队列q,并设置一个只会指向队头的指针front=q.top(),

经过这一步的操作,我们便完成了二叉树第一层的遍历

接着,对二叉树的第二层进行遍历,先将第一层的节点从队列q中探出,然后将其数据放入数组v

因为二叉树第二层的节点就是第一层节点的子节点,所以这个时候我们只要使用第一层节点的指针域检索到第二层节点并且放入队q

然后再循环进行第一个节点进行过的操作,将节点弹出q,数据进去v

综上所述首先要进行的循环(需要被重复操作的步骤)是要判断q是否为空,这个while循环所需要循环的次数是直到整个二叉树节点全部都被层序遍历遍历完毕为止 

如果队q为空,那么说明二叉树已经被全部遍历完毕

紧接着第二个需要进行的循环便是对每个节点进行弹出q,再将其数据入v,最后将其子节点入q操作

3.代码

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) 
    {
        vector<vector<int>> ans;
        if(root==nullptr) return ans;

        queue<TreeNode*> q;
        q.push(root);

        int numlaynode=1;

        while(!q.empty())
        {
            vector<int> v;
            while(numlaynode!=0)
            {
                numlaynode--;
                TreeNode*front=q.front();

                q.pop();
                v.push_back(front->val);

                if(front->left!=nullptr)
                {
                    q.push(front->left);
                }
                if(front->right!=nullptr)
                {
                    q.push(front->right);
                }
            }
            numlaynode=q.size();
            ans.push_back(v);
        }
        return ans;
    }
};

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务