当前位置: 首页 > backend >正文

树的直径(树形DP)

题单来源,算法教程视频:树形 DP:树的直径【基础算法精讲 23】_哔哩哔哩_bilibili

1.二叉树的直径

题目:543. 二叉树的直径 - 力扣(LeetCode)

code

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int ans = 0;int dfs(TreeNode* root){if(!root) return -1;int l = dfs(root->left) + 1, r = dfs(root->right) + 1;ans = max(ans, l + r);return max(l, r);}int diameterOfBinaryTree(TreeNode* root) {dfs(root);return ans;}
};

2.二叉树中的最大路径和

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

上题为边权最大路径和,此题为最大点权路径和

code

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int ans = -0x3f3f3f3f;int dfs(TreeNode* root){if(!root) return 0;int l = max(dfs(root->left), 0), r = max(dfs(root->right), 0);ans = max(ans, root->val + l + r);return max(l, r) + root->val;}int maxPathSum(TreeNode* root) {dfs(root);return ans;}
};

3.相邻字符不同的最长路径

题目:2246. 相邻字符不同的最长路径 - 力扣(LeetCode)

code

class Solution {
public:static const int N = int(1e5 + 20);int ans = 0;int n; string _s;vector<vector<int>> g;int dfs(int root){int max1 = 0, max2 = 0;for(int i : g[root]){int sz = dfs(i);if(_s[i] == _s[root]) continue;if(sz > max1) {max2 = max1;max1 = sz;}else if(sz > max2) max2 = sz;}ans = max(ans, max1 + max2 + 1);return max1 + 1;}int longestPath(vector<int>& parent, string s) {g.resize(N);n = parent.size();_s = s;for(int i = 0; i < n; i++){if(parent[i] < 0 ) continue;g[parent[i]].push_back(i);}dfs(0);return ans;}
};

http://www.xdnf.cn/news/17949.html

相关文章:

  • 云计算-Kubernetes+Istio 实现金丝雀发布:流量管理、熔断、流量镜像、ingreess、污点及pv案例实战
  • 新手向:Python异常处理(try-except-finally)详解
  • LangChain4j:基于 SSE 与 Flux 的 AI 流式对话实现方案
  • Apereo CAS靶场渗透练习
  • Windows常见文件夹cache的作用还有其他缓存类型文件夹的作用
  • pytest介绍(python测试框架)(@pytest.mark.parametrize、@pytest.fixtures)
  • functools:管理函数的工具
  • Autosar Os新手入门
  • Nginx蜘蛛请求智能分流:精准识别爬虫并转发SEO渲染服务
  • 3 种方式玩转网络继电器!W55MH32 实现网页 + 阿里云 + 本地控制互通
  • cuda编程笔记(15)--使用 CUB 和 atomicAdd 实现 histogram
  • Console.ReadLine()用法功能
  • 进程替换:从 “改头换面” 到程序加载的底层逻辑
  • PowerShell来关闭 Windows 安全中心
  • CUDA 编程笔记:CUDA内存模型概述
  • Nginx域名和IP兼容双方的API地址
  • Neural Network Layer|神经网络的层
  • Latex使用了期刊templates但是字体样式不对
  • Vue 3.5+ Teleport defer 属性详解:解决组件渲染顺序问题的终极方案
  • 数字化与人工智能的崛起及其社会影响研究报告
  • CentOS 7 一键部署 上Maria Database(MariaDB)10.3.38 安装手册(避开 Oracle 19c 路径)
  • UE5多人MOBA+GAS 46、制作龙卷风技能
  • draw.io编辑 UML 类图
  • Cohere 开发企业级大型语言模型(LLM)
  • css实现圆角+边框渐变+背景半透明
  • 开源数据发现平台:Amundsen Frontend Service React 配置 Flask 配置 Superset 预览集成
  • DeepResearch开源与闭源方案对比
  • python线程学习
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(2):11-20语法
  • 深入解析C++ STL链表(List)模拟实现