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

📅  最后修改于: 2023-12-03 14:49:27.750000             🧑  作者: Mango

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

在二叉树中,叶子节点是指没有子节点的节点。本题目要求从给定的二叉树中找到K个最小的叶子节点。

算法思路

我们可以使用深度优先搜索(DFS)来解决这个问题。DFS算法中,我们可以遍历整个二叉树,并记录下每个叶子节点的值。然后,我们根据节点值的大小,选择返回K个最小的叶子节点。

具体的算法如下:

  1. 遍历二叉树,使用DFS将每个叶子节点的值记录下来,并保存在一个数组中。
  2. 将数组排序,以便后续选择K个最小的叶子节点。
  3. 返回数组中前K个最小的叶子节点。
代码实现

下面是一个使用Python实现的例子代码:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def findKSmallestLeaves(root, k):
    leaves = []
    dfs(root, leaves)
    leaves.sort()
    return leaves[:k]

def dfs(node, leaves):
    if not node:
        return
    if not node.left and not node.right:
        leaves.append(node.val)
    dfs(node.left, leaves)
    dfs(node.right, leaves)

# 测试代码
# 创建一个二叉树
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

k = 2
result = findKSmallestLeaves(root, k)
print(result)

以上代码中,我们首先定义了一个TreeNode类,用于表示二叉树的节点。然后,我们使用findKSmallestLeaves函数来实现题目要求的功能。在函数内部,我们使用DFS遍历二叉树,并将每个叶子节点的值保存在一个数组leaves中。最后,我们使用Python的sort()方法对leaves进行排序,并返回数组中前K个最小的叶子节点。

总结

通过使用DFS算法,我们可以从给定的二叉树中找到K个最小的叶子节点。这种算法的时间复杂度为O(nlog n),其中n为二叉树中的节点数量。请注意,以上代码只是一个简单的例子,实际使用时需要根据具体情况进行修改。