📅  最后修改于: 2023-12-03 15:03:20.300000             🧑  作者: Mango
给定一棵 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)。