树形 DP:树的直径

news2024/11/16 1:56:09

leetCode 104.二叉树的最大深度104. 二叉树的最大深度 - 力扣(LeetCode)

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(root == nullptr) return 0;
        int lDepth = maxDepth(root->left);
        int rDepth = maxDepth(root->right);
        return max(lDepth,rDepth)+1;
    }
};

leetCode 543.二叉树的直径 543. 二叉树的直径 - 力扣(LeetCode)

换个角度看直径:从一个叶子出发向上,在某个节点“拐弯”,向下到达另一个叶子,得到了由两条链拼起来的路径。(也可能只有一条链)

算法:遍历二叉树,在计算最长链的同时,顺带把直径算出来

  • 在当前节点“拐弯”的直径长度 = 左子树的最长链 + 右子树的最长链 + 2
  • 返回给父节点的是以当前节点为根的子树的最长链 = max(左子树的最长链,右子树的最长链)+1
class Solution {
public:
    int diameterOfBinaryTree(TreeNode* root) {
        int ans=0;
        function<int(TreeNode*)>dfs =[&](TreeNode* node) -> int {
            if(node == nullptr) return -1;// 下面+1后,对于叶子节点就刚好是 0
            int left = dfs(node->left);
            int right = dfs(node->right);
            ans = max(ans,left+right+2);
            return max(left,right)+1; //当前子树最大链长
        };
        dfs(root);
        return ans;
    }
};

leetCode 124.二叉树中的最大路径和 124. 二叉树中的最大路径和 - 力扣(LeetCode)

算法:遍历二叉树,在计算最大链和的同时,顺带更新答案的最大值

  • 在当前节点 "拐弯"最大路径和 = 左子树最大链和 + 右子树最大链和 + 当前节点值
  • 返回给父节点的是max(左子树最大链和,右子树最大链和)+当前节点值。如果这个值是负数,则返回 0 
class Solution:
    def maxPathSum(self, root: Optional[TreeNode]) -> int:
        ans = -inf
        def dfs(node):
            if node is None:
                return 0
            l_val = dfs(node.left)
            r_val = dfs(node.right)
            nonlocal ans
            ans = max(ans,l_val+r_val+node.val)
            return max(max(l_val,r_val) + node.val,0)
        dfs(root)
        return ans

2246.相邻字符不同的最长路径(1245.树的直径)2246. 相邻字符不同的最长路径 - 力扣(LeetCode)

class Solution {
public:
    int longestPath(vector<int>& parent, string s) {
        int n = parent.size();
        vector<vector<int>> g(n);
        for(int i=1;i<n;i++) {
            g[parent[i]].push_back(i);
        }
        int ans = 0;
        function<int(int)> dfs = [&](int x) -> int {
            int maxLen = 0;
            for (int y : g[x]) {
                int len = dfs(y) + 1;
                if (s[y] != s[x]) {
                    ans = max(ans, maxLen + len);
                    maxLen = max(maxLen, len);
                }
            }
            return maxLen;
        };
        dfs(0);
        return ans+1;
    }
};

// -1 0 0 1 1 2
//  0 1 2 3 4 5

//   0:[1,2]
//   1:[3,4]
//   2:[5]

推荐文章和参考视频:

树形 DP:树的直径【基础算法精讲 23】_哔哩哔哩_bilibili

543. 二叉树的直径 https://leetcode.cn/problems/diameter-of-binary-tree/solution/shi-pin-che-di-zhang-wo-zhi-jing-dpcong-taqma/
124. 二叉树中的最大路径和 https://leetcode.cn/problems/binary-tree-maximum-path-sum/solution/shi-pin-che-di-zhang-wo-zhi-jing-dpcong-n9s91/
2246. 相邻字符不同的最长路径 https://leetcode.cn/problems/longest-path-with-different-adjacent-characters/solution/by-endlesscheng-92fw/ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1247862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HashMap的实现原理,HashMap方法详解,hash()计算的原理,扩容机制

文章目录 说一下HashMap的实现原理(非常重要)①HashMap的工作原理HashMap存储结构常用的变量HashMap 构造函数tableSizeFor() put()方法详解hash()计算原理resize() 扩容机制get()方法为什么HashMap链表会形成死循环 说一下HashMap的实现原理(非常重要) HashMap概述&#xff1…

冷空气来袭,关注身体状况,手表这几个功能速get

进入小雪节气后&#xff0c;冷空气活动更加频繁&#xff0c;气温会越来越低&#xff0c;或进入感冒发烧的高发期。大家在感觉到身体不适时&#xff0c;要多关注一下自己的体温、血氧饱和度、心率等指标&#xff0c;通过手表就可以掌握这些身体讯号&#xff0c;速来了解一下&…

SQL 通配符:用于模糊搜索和匹配的 SQL 关键技巧

SQL通配符字符 通配符字符用于替代字符串中的一个或多个字符。通配符字符与LIKE运算符一起使用。LIKE运算符用于在WHERE子句中搜索列中的指定模式。 示例 返回所有以字母 ‘a’ 开头的客户&#xff1a; SELECT * FROM Customers WHERE CustomerName LIKE a%;通配符字符 符…

智能WIFI 电子标签

7.5/10.2/13.3寸大屏电子墨水屏高清显示 无需部署专用基站&#xff0c;基于标准WIFI网络通信实时在线 无需接线&#xff0c;极简安装 超低功耗&#xff1a;充一次电续航一年~ 系统联动&#xff0c;信息统一&#xff0c;WiFi控制&#xff0c;批量快速刷新 随改随变化&#…

【数据分享】我国12.5米分辨率的DEM地形数据(免费获取/地理坐标系)

DEM地形数据是我们在各种研究和设计中经常使用的数据&#xff01;之前我们分享过500米分辨率的DEM地形数据、90米分辨率的DEM地形数据、30米分辨率的DEM地形数据&#xff08;均可查看之前的文章获悉详情&#xff09;。 本次我们为大家带来的是分辨率为12.5m的DEM地形数据&#…

Linux后台运行Python的py文件,如何使ssh工具退出后仍能运行

常规运行 python3 mysqlbak.py ssh工具退出后&#xff0c;或ctrlc中断后&#xff0c;程序将不在运行 后台运行 nohup python3 mysqlbak.py > mysqlbak.log & > mysqlbak.log为可选项&#xff0c;输出日志到指定文件&#xff0c;如果不写&#xff0c;输出日志到nohup…

CENTOS8.2下的内核启动参数cmdline更新

error: environment block too small. 删掉grubenv重新生成。 查看是什么方式启动 [rootlocalhost boot]# [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS UEFI 先改etc/default/grub GRUB_CMDLINE_LINUX"consolettyS0,115200n8 crashkernelauto ignore_…

大语言模型概述(一):基于亚马逊云科技的研究分析与实践

大型语言模型指的是具有数十亿参数&#xff08;B&#xff09;的预训练语言模型&#xff08;例如&#xff1a;GPT-3, Bloom, LLaMA)。这种模型可以用于各种自然语言处理任务&#xff0c;如文本生成、机器翻译和自然语言理解等。 大语言模型的这些参数是在大量文本数据上训练的。…

LeeCode前端算法基础100题(2)- 最多水的容器

一、问题详情&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;…

C++ 之win32多线程应用总结

InterlockedIncrement 函数的作用&#xff1a; 在多线程同时对一个变量访问时&#xff0c;保证一个线程访问变量时其他线程不能访问 事件是很常用的多线程同步互斥机制 HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, // SECURITY_ATTRIBUTES结构指针&…

长文讲清荧光定量PCR(最新版)q-pcr rt-pcr

为讲透qPCR&#xff0c;我会持续更新本文&#xff0c;点关注追踪查看。 1.初阶认识 这个阶段&#xff0c;我们要明白一些概念和术语&#xff0c;避免自己在师兄面前错误的瞎哔哔&#xff0c;比如&#xff1a; 问&#xff1a;RT-PCR、qPCR、Real-time PCR、real-time RT-PCR有…

青云科技容器平台与星辰天合存储产品完成兼容性互认证

近日&#xff0c; 北京青云科技股份有限公司&#xff08;以下简称&#xff1a;青云科技&#xff09;的 KubeSphere 企业版容器平台成功完成了与 XSKY星辰天合的企业级分布式统一数据平台 V6&#xff08;简称&#xff1a;XEDP&#xff09;以及天合翔宇分布式存储系统 V6&#xf…

python——第十二天

内置模块或者其他模块学习方式&#xff1a; dir help os模块负责程序与操作系统的交互&#xff0c;提供了访问操作系统底层的接口&#xff1b;即os模块提供了非常丰富的方法用来处理文件和目录。 os&#xff1a; os.path 遍历C盘代码 import os from os import path def …

0003Java程序设计-ssm基于微信小程序的家教信息管理系统

文章目录 摘要目 录系统实现开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘要 本文讲述了基于微信小程序的家教信息管理系统的设计与实现。结合线上管理的特点&#xff0c;分析了家教信息管理系统的现状&#xff0c;给出…

leetcode:环形链表的入环点

题目描述 题目链接:力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目分析 我们假设起点到环的入口点的距离是L&#xff0c;入口点到相遇点的距离是X&#xff0c;环的长度是C 那么画图我们可以得知&#xff1a; 从开始到相遇时slow走的距离是LX从…

qRT-PCR相对定量计算详解qPCR相对定量计算方式——2^-(∆∆Ct) deta t

做完转录组分析之后&#xff0c;一般都要求做qRT-PCR来验证二代测序得到的转录本表达是否可靠。荧光定量PCR是一种相对表达定量的方法&#xff0c;他的计算方法有很多&#xff0c;常用的相对定量数据分析方法有双标曲线法&#xff0c;ΔCt法&#xff0c;2^-ΔΔCt法(Livak法)&a…

STM32入门笔记15_PWR电源管理模块

PWR和低功耗模式 PWR简介 PWR(Power Control) 电源控制PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压检测器和低功耗模式的功能可编程电压检测器(PVD) 可以监控VDD电源电压&#xff0c;当VDD下降到PVD阈值以下或上升到PVD阈值之上时&#xff0c;PVD会触…

通过线性回归进行房价预测

房价预测一直是房地产行业和投资者关注的重要问题。线性回归是一种常用的回归算法&#xff0c;可以建立输入变量和连续输出变量之间的关系。在本文中&#xff0c;我们将探讨如何使用线性回归算法来进行房价预测&#xff0c;并介绍该方法的步骤和实践技巧。 一、线性回归算法简…

多回路交流三相单相电压电流电量监测开口式互感器适用多种环境用电能耗监控

1 产品概述 多回路交流无线电压电流传感器/电量采集监测仪搭配多路开口式互感器&#xff0c;可以监控采集三相电压、电流、功率和电量等信息&#xff0c;可用于能耗采集监控。支持RS485和4G网络接口&#xff0c;数据可以对接客户指定的第三方云平台。本产品可实现单相/三相用电…

Linux应用开发基础知识——I2C应用编程(十三)

一、无需编写驱动程序即可访问 I2C 设备 APP 访问硬件肯定是需要驱动程序的&#xff0c;对于 I2C 设备&#xff0c;内核提供了驱动程序 drivers/i2c/i2c-dev.c&#xff0c;通过它可以直接使用下面的 I2C 控制器驱动程序来访问 I2C 设备。 i2c-tools 是一套好用的工具&#xff0…