【2024考研】题解16 | #求二叉树的层序遍历#

求二叉树的层序遍历

https://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
#include <queue>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        // write code here
        //二维数组存储
        vector<vector<int>> ans;
        //特例 空
        if(root == nullptr) return ans;
        //构造辅助队列q 根放进来
        queue<TreeNode*> q;
        q.push(root);
        //树节点指针定位当前节点
        TreeNode* cur;
        //只要队列里边不空 猛猛干
        while (!q.empty()) {
            vector<int> row;//临时行数组存储单层结点
            int n = q.size();//每层长度随着每一次循环而临时确定

            for(int i = 0; i < n; i++){
                cur = q.front();//当前结点指针定位到队头
                row.push_back(cur->val);//行数组暂时存储该节点值
                q.pop();//取值后的节点出队

                if(cur->left) q.push(cur->left);//注意这里不是递归
                if(cur->right) q.push(cur->right);
            }
            ans.push_back(row);//临时存储row传给最终ans输出
        }
        return ans;//最终输出
    }
};

时间复杂度:O(n),其中n是二叉树的节点数。每个节点都会被遍历一次。

空间复杂度:O(m),其中m是二叉树的最大宽度(即最多的节点数)。在队列中最多同时存储m个节点。

算法思想:使用队列进行层序遍历。

①首先将根节点入队,

②然后循环进行以下操作:从队列中取出当前层的所有节点,将它们的值存入临时行数组中,并将它们的左右子节点(如果有)入队。

③将临时行数组存入最终结果数组中。

④重复上述操作直到队列为空。

⑤最终输出最终结果数组。

2024考研数据结构 文章被收录于专栏

本人考研刷算法题,立此专栏练习强化。

全部评论

相关推荐

11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务