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

全部评论

相关推荐

06-12 10:50
门头沟学院 Java
你的不定积分没加C:我怎么在学院群看到了同样的话
点赞 评论 收藏
分享
牛客38347925...:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务