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

题目

102. 二叉树的层序遍历

中等

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

示例 1:

力扣第102题 广度优先搜索 二叉数 c++_第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++ 代码

 ​
/**
 * 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> levelOrder(TreeNode* root) {
        // 创建一个队列,用于存储待处理的节点
        queue que;

        // 如果根节点不为空,将其加入队列
        if(root!=NULL) que.push(root);

        // 创建一个二维向量ans,用于存储遍历结果
        vector> ans;

        // 当队列不为空时,执行以下操作:
        while(!que.empty())
        {
            // 获取当前队列的大小size,表示当前层的节点个数
            int size = que.size();

            // 创建一个空的一维向量vec,用于存储当前层的节点值
            vector vec;

            // 从队列中取出size个节点
            for(int i=0;ival);

                // 如果该节点有左子节点,将左子节点加入队列
                if(node->left) que.push(node->left);

                // 如果该节点有右子节点,将右子节点加入队列
                if(node->right) que.push(node->right);
            }

            // 将vec加入到ans中,表示当前层的节点值已经遍历完成
            ans.push_back(vec);
        }

        // 返回最终的结果ans,即二叉树的层次遍历结果
        return ans;
    }
};

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

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

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

你可能感兴趣的:(二叉数,leetcode,数据结构,算法,leetcode,c++,广度优先,queue)