📌  相关文章
📜  N叉树中的第K个最小元素(1)

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

N叉树中的第K个最小元素

问题描述

给定一棵 N 叉树的根节点,寻找这棵树中第 K 个最小的元素。

注意:树中的所有节点值都是唯一的。

示例
输入示例

示例图片

对于上述树,K = 3。

输出示例

输出 5。

解法

考虑深度优先遍历。

我们可以遍历整棵树,采用中序遍历的方式记录下遍历的结点,并存储在一个数组中。

在遍历时,我们需要记录当前已经遍历过的结点数量,当遍历完 K 个结点时,输出当前结点的值即可。

代码实现

时间复杂度:O(nlogn)

空间复杂度:O(n)

"""
# Definition for a Node.
class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children if children is not None else []
"""

class Solution:
    def kthSmallest(self, root: 'Node', k: int) -> int:
        # 中序遍历
        stack = []
        node = root
        res = []
        count = 0  # 记录已经遍历的结点数量
        while stack or node:
            if node:
                stack.append(node)
                node = node.children[0] if node.children else None
            else:
                node = stack.pop()
                # 记录遍历的元素
                res.append(node.val)
                count += 1
                if count == k:
                    return node.val
                node = node.children[1] if len(node.children) > 1 else None
        return -1  # 该树里没有第 K 小的元素
总结

本题的解法就是采用深度优先遍历的方式,遍历整棵树,并记录中序遍历得到的每个结点,计数器 count 记录已经遍历的结点数量,在遍历到第 K 个结点时,输出当前结点的值即可。

时间复杂度为 O(nlogn),空间复杂度为 O(n)。