火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

算法讲解078【必备】树型dp-上

作者: 作者的头像   huolong , 时间:2025-04-30 16:39:15 , 所有人可见, 阅读  28

前置知识: 讲解017、讲解018、讲解036、讲解037 - 二叉树基础内容 讲解059 - 建图、链式前向星建图、拓扑排序 讲解060 - 拓扑排序的扩展技巧,讲的题就是DAG图上的动态规划 【必备】课程的动态规划大专题从讲解066开始,建议从头开始学习会比较系统

本节课讲述最常见的树型dp问题,详解树型dp的解题套路

下节课会讲述树型dp利用dfn序的内容

注意: 讲解060-拓扑排序的扩展技巧,DAG图上做动态规划(Directed Acyclic Graph),不要跳过 树型dp中有关 换根dp 的内容,将放在【扩展】课程阶段讲述


树 头节点没有父亲,其他节点只有一个父亲的有向无环图,直观理解为发散状 在树上,从头节点出发到任何节点的路径是唯一的,不管二叉树还是多叉树都如此

树型dp在树上做动态规划,依赖关系比一般动态规划简单 因为绝大部分多数都是父依赖子 只是依赖关系简单,不代表题目简单

树型dp套路 1)分析父树得到答案需要子树的哪些信息 2)把子树信息的全集定义成递归返回值 3)通过递归让子树返回全集信息 4)整合子树的全集信息得到父树的全集信息并返回


题目1 最大BST子树 给定一个二叉树,找到其中最大的二叉搜索树(BST)子树,并返回该子树的大小 其中,最大指的是子树节点数最多的 二叉搜索树(BST)中的所有节点都具备以下属性: 左子树的值小于其父(根)节点的值 右子树的值大于其父(根)节点的值 注意:子树必须包含其所有后代 测试链接 : https://leetcode.cn/problems/largest-bst-subtree/


题目2 二叉搜索子树的最大键值和 给你一棵以 root 为根的二叉树 请你返回 任意 二叉搜索子树的最大键值和 二叉搜索树的定义如下: 任意节点的左子树中的键值都 小于 此节点的键值 任意节点的右子树中的键值都 大于 此节点的键值 任意节点的左子树和右子树都是二叉搜索树 测试链接 : https://leetcode.cn/problems/maximum-sum-bst-in-binary-tree/


题目3 二叉树的直径 给你一棵二叉树的根节点,返回该树的直径 二叉树的 直径 是指树中任意两个节点之间最长路径的长度 这条路径可能经过也可能不经过根节点 root 两节点之间路径的 长度 由它们之间边数表示 测试链接 : https://leetcode.cn/problems/diameter-of-binary-tree/


题目4 在二叉树中分配硬币 给你一个有 n 个结点的二叉树的根结点 root 其中树中每个结点 node 都对应有 node.val 枚硬币 整棵树上一共有 n 枚硬币 在一次移动中,我们可以选择两个相邻的结点,然后将一枚硬币从其中一个结点移动到另一个结点 移动可以是从父结点到子结点,或者从子结点移动到父结点 返回使每个结点上 只有 一枚硬币所需的 最少 移动次数 测试链接 : https://leetcode.cn/problems/distribute-coins-in-binary-tree/


题目5 没有上司的舞会 某大学有n个职员,编号为1...n 他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树 父结点就是子结点的直接上司 现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 但是如果某个职员的直接上司来参加舞会了 那么这个职员就无论如何也不肯来参加舞会了 所以请你编程计算邀请哪些职员可以使快乐指数最大,返回最大的快乐指数。 测试链接 : https://www.luogu.com.cn/problem/P1352 本题和讲解037的题目7类似 链式链接 : https://leetcode.cn/problems/house-robber-iii/


题目6 监控二叉树 给定一个二叉树,我们在树的节点上安装摄像头 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象 计算监控树的所有节点所需的最小摄像头数量 测试链接 : https://leetcode.cn/problems/binary-tree-cameras/


题目7 路径总和 III 给定一个二叉树的根节点 root ,和一个整数 targetSum 求该二叉树里节点值之和等于 targetSum 的 路径 的数目 路径 不需要从根节点开始,也不需要在叶子节点结束 但是路径方向必须是向下的(只能从父节点到子节点) 测试链接 : https://leetcode.cn/problems/path-sum-iii/

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码