当前位置: 首页 > article >正文

LeetCode 解题思路 21(Hot 100)

在这里插入图片描述

解题思路:

  1. 初始化: 创建一个结果列表和一个队列,将根节点入队。
  2. 循环处理: 当队列不为空时,记录当前层节点数 size,依次处理这些节点:
  • 出队当前节点,将其值加入临时列表。
  • 若存在左子节点,入队。
  • 若存在右子节点,入队。
  1. 返回结果: 内层循环结束时,将临时列表加入结果列表。外层循环结束时结果列表中存储的即为层序遍历的结果。

Java代码:

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<>();
        if (root == null) return result;

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);

        while (!queue.isEmpty()) {
            int size = queue.size();
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                list.add(node.val);

                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
            }
            result.add(list);
        }
        return result;
    }
}

复杂度分析:

  • 时间复杂度: O(n),其中 n 是树的节点总数。
  • 空间复杂度: O(n),队列中最多存储​同一层的节点数。

在这里插入图片描述

解题思路:

  1. 终止条件: 数组为空或长度为0时返回 null。
  2. 递归构建:
  • 找到当前数组的中点,作为当前子树的根节点。
  • 递归处理左半部分数组(左子树)。
  • 递归处理右半部分数组(右子树)。

Java代码:

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return buildBST(nums, 0, nums.length - 1);
    }

    private TreeNode buildBST(int[] nums, int left, int right) {
        if (left > right) return null;

        int mid = (left + right) / 2;
        TreeNode root = new TreeNode(nums[mid]);

        root.left = buildBST(nums, left, mid - 1);
        root.right = buildBST(nums, mid + 1, right);

        return root;
    }
}

复杂度分析:

  • 时间复杂度: O(n),每个节点被访问且仅被访问一次。
  • 空间复杂度: O(log n),递归栈的深度为树的高度,平衡二叉树的高度为 log n。

http://www.kler.cn/a/592502.html

相关文章:

  • JavaScript 金额运算精度丢失问题及解决方案
  • DAPO:一个开源的大规模大型语言模型LLM强化学习系统
  • 【初学者】请介绍一下线性与非线性的区别?
  • Android Compose 框架文本选择与编辑模块源码深度剖析(三)
  • 认知篇#4:YOLO评价指标及其数学原理的学习
  • Jetson Nano 三个版本(B01 4GB、Orin 4GB、Orin 8GB)本地部署Deepseek等大模型的测评
  • 零知识证明:区块链隐私保护的变革力量
  • 从关键词到权重:TF-IDF算法解析
  • LeetCode 1963.使字符串平衡的最小交换次数:计数模拟(不需要麻烦的“三种写法一步步优化”)
  • 【AVRCP】服务发现互操作性:CT 与 TG 的 SDP 协议契约解析
  • 算法刷题记录——专题目录汇总
  • AFFiNE:下一代开源全能知识库工具,重新定义协作与创作
  • 如何在CCS12.7.0中生成BIN文件
  • Gemini Advanced新功能详解:AI创作与协作的终极解决方案
  • 杰理科技JL703N双模蓝牙芯片—云信
  • 免费开源的NAS解决方案:TrueNAS
  • pycharm运行终端部署(Anaconda终端与Git运行终端)
  • 抽象工厂模式 (Abstract Factory Pattern)
  • 【Apache Storm】
  • python3+pytest+allure自动化框架搭建