题解 | #牛牛的二叉树问题# 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 背包问题 分治算法:归并排序、快速排序