题解 | #牛牛的二叉树问题# Python
牛牛的二叉树问题
https://www.nowcoder.com/practice/1b80046da95841a9b648b10f1106b04e
我们可以使用一个最小堆来维护与目标值最接近的节点值。首先,我们对树进行深度优先搜索,将每个节点的值与目标值进行比较,并将它们放入最小堆中。当堆的大小超过 m 时,我们将堆顶的节点值弹出,并保持堆的大小为 m。
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类
# @param target double浮点型
# @param m int整型
# @return int整型一维数组
#
import heapq
class Solution:
def findClosestElements(self , root: TreeNode, target: float, m: int) -> List[int]:
def dfs(node):
if not node:
return
diff = abs(node.val - target)
heapq.heappush(h, (-diff, node.val))
if len(h) > m:
heapq.heappop(h)
dfs(node.left)
dfs(node.right)
h = [] # 最小堆
dfs(root)
result = [val for _, val in h]
result.sort() # 结果按照非递减顺序排序
return result
算法题刷刷刷 文章被收录于专栏
数组、链表、栈、队列、堆、树、图等。 查找和排序:二分查找、线性查找、快速排序、归并排序、堆排序等。 动态规划:背包问题、最长公共子序列、最短路径 贪心算法:活动选择、霍夫曼编码 图:深度优先搜索、广度优先搜索、拓扑排序、最短路径算法(如 Dijkstra、Floyd-Warshall) 字符串操作:KMP 算法、正则表达式匹配 回溯算法:八皇后问题、0-1 背包问题 分治算法:归并排序、快速排序