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。
相关推荐
alphaTao3 分钟前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
甄心爱学习7 分钟前
【leetcode】判断平衡二叉树
python·算法·leetcode
颜酱16 分钟前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法
不知名XL35 分钟前
day50 单调栈
数据结构·算法·leetcode
@––––––1 小时前
力扣hot100—系列2-多维动态规划
算法·leetcode·动态规划
xsyaaaan1 小时前
代码随想录Day31动态规划:1049最后一块石头的重量II_494目标和_474一和零
算法·动态规划
Jay Kay2 小时前
GVPO:Group Variance Policy Optimization
人工智能·算法·机器学习
Epiphany.5562 小时前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
YuTaoShao2 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展
茉莉玫瑰花茶2 小时前
C++ 17 详细特性解析(5)
开发语言·c++·算法