• 102.二叉树的层序遍历


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

    示例 1:


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

    思路一:迭代(队列实现)

    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 q;
    17. vectorint>> v;
    18. if(root==nullptr) {
    19. return v;
    20. }
    21. q.push(root);
    22. while(!q.empty())//从上到下遍历每一层
    23. {
    24. vector<int> level;
    25. int size=q.size();
    26. //从左到右遍历一层的所有结点,size是一层的结点总数
    27. for(int i=0;i//要使用size而不是q.size(),因为q.size()一直变
    28. {
    29. TreeNode* node=q.front();
    30. q.pop();
    31. level.push_back(node->val);
    32. if(node->left)
    33. q.push(node->left);
    34. if(node->right)
    35. q.push(node->right);
    36. }
    37. v.push_back(level);
    38. }
    39. return v;
    40. }
    41. };

    思路二:递归 (前序遍历)

    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. vectorint>> result;
    16. int depth = 0;
    17. order(root, result, depth);
    18. return result;
    19. }
    20. void order(TreeNode* cur, vectorint>>& result, int depth) {
    21. if (cur == nullptr) return;
    22. if (result.size() == depth) result.push_back(vector<int>());//二叉树顶层按0层来算
    23. result[depth].push_back(cur->val);
    24. order(cur->left, result, depth + 1);
    25. order(cur->right, result, depth + 1);
    26. }
    27. };
  • 相关阅读:
    【小程序练习】文件操作案例
    PS太难学,这款软件更简单!——Lightroom
    Windows DHCP 筛选池同步
    计算机毕业设计Java旅游攻略开发系统(源码+mysql数据库+系统+lw文档)
    C++入门(二)
    Rust权威指南之结构体
    2311C++抽象工厂
    双向电平转换电路
    jenkins 如何查看html格式的测试报告
    文心一言与GPT-4全面对比——人工智能语言模型的新纪元
  • 原文地址:https://blog.csdn.net/weixin_50437588/article/details/126155927