• LeetCode--102. 二叉树的层序遍历(C++描述)


    // Source : https://leetcode.cn/problems/binary-tree-level-order-traversal/
    // Date : 2022-7-26
    /**************************************************************************************  
    给你二叉树的根节点 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
    **************************************************************************************/

    /*******************************************************************************************************
    题目分析:本题使用最常规的队列进行广度优先遍历即可,首先将根节点入队,如果有左右子树,则需要将根节点出队然后将左右子树入队,直到队列为空即可停止。
    ********************************************************************************************************/

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution {
    public:
        vector<vector<int>> levelOrder(TreeNode* root) {
            vector<vector<int>> res;
            queue <TreeNode *> my_q;
            if(!root)
                return res;
            my_q.push(root);
            // 当队列不为空的时候进入循环,依次放入节点
            while(!my_q.empty())
            {
                // 不同层,节点个数不同,因此每次需要求节点个数
                int cur_size = my_q.size();
                // 二维数组初始化
                res.push_back(vector<int> ());
                // 先将当前节点的值放入二维数组中
                for(int i = 0;i < cur_size;++i)
                {
                    auto cur_node = my_q.front();
                    // 栈顶元素抛出
                    my_q.pop();
                    // 二维数组末尾插入元素
                    res.back().push_back(cur_node -> val);
                    // 左右子树进队
                    if(cur_node -> left)
                        my_q.push(cur_node -> left);
                    if(cur_node -> right)
                        my_q.push(cur_node -> right);
                }
            }
            return res;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像
    CentOS在应用程序菜单中创建快捷方式
    wordpress 突然报错Error establishing a database connection
    【微信小程序】微信小程序跳转H5页面的实现思路与方案
    MySQL基础与库的基本操作
    数据结构详细笔记——树
    刷题记录:牛客NC23501小A的回文串
    【USB设备设计】-- CDC 设备开发(虚拟串口设备)
    Linux学习笔记--高级
    【C语言】for循环
  • 原文地址:https://blog.csdn.net/qq_44614524/article/details/125991652