📌  相关文章
📜  从给定的二叉树中找到 K 个最小的叶节点(1)

📅  最后修改于: 2023-12-03 15:22:01.847000             🧑  作者: Mango

从给定的二叉树中找到 K 个最小的叶节点

问题描述

给定一个二叉树,找到其中 K 个最小的叶节点,并按照从小到大的顺序返回它们的值。

示例
输入: root = [3, 5, 1, 6, 2, 9, 8, null, null, 7, 4], K = 3
       3
      / \
     5   1
    / \  / \
   6   2 9  8
      / \
     7   4
输出: [2, 4, 7]
解题思路
  1. 遍历二叉树并存储值为叶节点的所有节点
  2. 对叶节点列表进行排序,找到前 K 个节点并返回其值
代码实现
class Solution:
    def findKSmallLeaves(self, root: TreeNode, k: int) -> List[int]:
        leaves = []

        # DFS遍历整个二叉树,将所有叶子节点加入leaves列表
        def helper(node):
            if node is None:
                return
            if node.left is None and node.right is None:
                leaves.append(node.val)
            helper(node.left)
            helper(node.right)

        helper(root)

        # 对叶节点列表进行排序并取前k个
        return sorted(leaves)[:k]
复杂度分析
  • 时间复杂度:O(NlogN),其中 N 是树的节点数。对树进行遍历的时间复杂度为 O(N),排序的时间复杂度为 O(NlogN)。
  • 空间复杂度:O(N),需要使用 O(N) 大小的空间存储在列表中的所有叶子节点。