• 力扣第102题 广度优先搜索 二叉数 c++


    题目

    102. 二叉树的层序遍历

    中等

    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

    示例 1:

    输入:root = [3,9,20,null,null,15,7]
    输出:[[3],[9,20],[15,7]]
    

    示例 2:

    输入:root = [1]
    输出:[[1]]
    

    示例 3:

    输入:root = []
    输出:[]
    

    提示:

    • 树中节点数目在范围 [0, 2000] 内
    • -1000 <= Node.val <= 1000

    思路和解题方法

    首先定义了一个函数levelOrder,接受一个指向根节点的指针root,返回一个二维向量ans

    在函数内部,首先创建一个队列que,用于存储待处理的节点。如果根节点root不为空,将其加入队列。

    接下来,创建一个空的二维向量ans,用于存储遍历结果。

    使用一个循环,当队列不为空时,执行以下操作:

    1. 获取当前队列的大小size,表示当前层的节点个数。
    2. 创建一个空的一维向量vec,用于存储当前层的节点值。
    3. 在一个嵌套循环中,从队列中取出size个节点:
      • 取出队头节点node,并将其值加入到vec中。
      • 如果该节点有左子节点,将左子节点加入队列。
      • 如果该节点有右子节点,将右子节点加入队列。
    4. vec加入到ans中,表示当前层的节点值已经遍历完成。
    5. 重复上述操作,直到队列为空。
    6. 返回最终的结果ans,即二叉树的层次遍历结果。

    复杂度

            时间复杂度:

                    O(n)

    其中n是二叉树中节点的数量。

            空间复杂度n

                    O(n)

    队列中元素的个数不超过 nnn 个,故渐进空间复杂度为 O(n)

    c++ 代码

     ​
    
    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. vectorint>> levelOrder(TreeNode* root) {
    15. // 创建一个队列,用于存储待处理的节点
    16. queue que;
    17. // 如果根节点不为空,将其加入队列
    18. if(root!=NULL) que.push(root);
    19. // 创建一个二维向量ans,用于存储遍历结果
    20. vectorint>> ans;
    21. // 当队列不为空时,执行以下操作:
    22. while(!que.empty())
    23. {
    24. // 获取当前队列的大小size,表示当前层的节点个数
    25. int size = que.size();
    26. // 创建一个空的一维向量vec,用于存储当前层的节点值
    27. vector<int> vec;
    28. // 从队列中取出size个节点
    29. for(int i=0;i
    30. {
    31. // 取出队头节点node,并将其值加入到vec中
    32. TreeNode *node = que.front();
    33. que.pop();
    34. vec.push_back(node->val);
    35. // 如果该节点有左子节点,将左子节点加入队列
    36. if(node->left) que.push(node->left);
    37. // 如果该节点有右子节点,将右子节点加入队列
    38. if(node->right) que.push(node->right);
    39. }
    40. // 将vec加入到ans中,表示当前层的节点值已经遍历完成
    41. ans.push_back(vec);
    42. }
    43. // 返回最终的结果ans,即二叉树的层次遍历结果
    44. return ans;
    45. }
    46. };

    觉得有用的话可以点点赞,支持一下。

    如果愿意的话关注一下。会对你有更多的帮助。

    每天都会不定时更新哦  >人<  。

  • 相关阅读:
    MySQL高级篇——数据目录
    夯实基础上篇-图解 JavaScript 执行机制
    Chrome 重大更新,CORS 增加了两个新的请求头?
    java秋招面试一
    openStack:学习openStack的前提知识(1)虚拟化以及KVM简介
    PTA 编程题(C语言)-- 连续因子
    【spring】事务底层的实现流程
    Go 处理粘包拆包
    【刷题】BFS题目精选
    程序化交易是科学和艺术的结合
  • 原文地址:https://blog.csdn.net/jgk666666/article/details/133563564