LeetCode 解题思路 21(Hot 100)

解题思路:

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

Java代码:

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代码:

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。
相关推荐
<但凡.11 分钟前
C++修炼:内存管理
c++·算法
tpoog17 分钟前
[贪心算法]买卖股票的最佳时机 && 买卖股票的最佳时机Ⅱ && K次取反后最大化的数组和 && 按身高排序 && 优势洗牌(田忌赛马)
算法·贪心算法
大模型铲屎官39 分钟前
支持向量机(SVM):从入门到精通的机器学习利器
开发语言·人工智能·深度学习·算法·机器学习·llm·支持向量机(svm)
小檀6101 小时前
C语言基础08
c语言·算法·排序算法
wen__xvn1 小时前
每日一题力扣3248.矩阵中的蛇c++
c++·leetcode·矩阵
进击的jerk2 小时前
力扣45.跳跃游戏
开发语言·c++·算法·leetcode·游戏
rigidwill6662 小时前
LeetCode hot 100—颜色分类
数据结构·c++·算法·leetcode·职场和发展
__echooo2 小时前
【算法】力扣 713题:乘积小于 K 的子数组之深入思考
数据结构·c++·算法·leetcode·面试
最好的药物是乌梅2 小时前
【蓝桥杯速成】| 9.回溯升级
算法
牛贝跨境2 小时前
牛贝跟卖软件Niubox如何上架产品?
经验分享·其他·职场和发展