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

LeetCode 687 -- 二叉树

题目描述

最长同值路径
题目要求我们求树中两个节点之间的路径长度,并且满足这两个节点之间的所有节点的值相等,这个长度由它们之间的边数表示,其实就是节点数减一。
注意,这两个节点是可以跨越根节点的,也就是说,这两个节点不必在同一个子树中!

思路

对于二叉树的题目,🌲的遍历我们肯定是逃不过取的,问题是,二叉树有四种遍历方式,我们应该采用那种呢?
对于本题而言,后续遍历是一种合理的方式,因为我们需要在根节点汇总信息,将跟节点的值与左子树和右子树的值去比较,如果相等的话,说明跟节点和子树可以连接在一起。

代码

/**
 * 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 res = 0;
    
    int dfs(TreeNode *root)
    {
        if(root == NULL)   return 0; // 好习惯
        
        int left = dfs(root->left), right = dfs(root->right); // 这里求的是以左/右孩子为跟节点的最大路经常
        int retl = 0, retr = 0; // 这里求的是以当前节点为跟节点并且只与一个子树连通的路经长
        if(root->left && root->left->val == root->val)  retl = left + 1;
        if(root->right && root->right->val == root->val)    retr = right + 1;
        
        res = max(res, retl + retr); // 总的路经长是左子树+右zishu
        return max(retl, retr);  // 返回的是左子树 or 右子树的最大路径长度,倒y结构是不合法的,return (retl + retr) 是错误的!
    }
    
    int longestUnivaluePath(TreeNode* root) {
        dfs(root);
        return res;
    }
};
http://www.dtcms.com/a/111937.html

相关文章:

  • HTML5+CSS3+JS小实例:带滑动指示器的导航图标
  • 开源且完全没有审核限制的大型语言模型的概述
  • 电力载波单灯控制器:智能照明的关键技术
  • AQS 等待队列中的线程自旋多少次后挂起?
  • 为PXIe控制器配置NI Linux实时操作系统安装软件
  • #python项目生成exe相关了解
  • C++20新增内容
  • 前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标节流处理、throttle、限制触发频率(setTimeout、clearInterval)
  • 表结构数据的基本特征、获取、加工与使用
  • Java 状态模式 详解
  • 金融机构开源软件生命周期管理实务
  • 模组COF受损制程排查验证及改善
  • 从文本到多模态:如何将RAG扩展为支持图像+文本检索的增强生成系统?
  • 基于 docker 的 Xinference 全流程部署指南
  • shell语言替换脚本、填补整个命令行
  • 知识考量码【蓝桥】
  • leetcode-代码随想录-链表-翻转链表
  • 框架PasteForm实际开发案例,换个口味显示数据,支持echarts,只需要标记几个特性即可在管理端显示(2)
  • Python办公自动化(2)对wordpdf的操作
  • 青少年编程与数学 02-015 大学数学知识点 04课题、微积分
  • 如何判断多个点组成的3维面不是平的,如果不是平的,如何拆分成多个平面
  • 二叉树 递归
  • Linux操作系统 4.Linux实用操作
  • 《新疆建筑安全员C证》考试信息
  • ttkbootstrap 实现日期选择器, 开始和结束时间
  • OrangePi5Plus开发板不能正确识别USB 3.0 设备 (绿联HUB和Camera)
  • Flutter性能优化细节
  • 分子生成的深层次层次变分自编码器 - DrugHIVE 测评
  • Jetpack Compose CompositionLocal 深入解析:局部参数透传实践
  • Linux信号处理解析:从入门到实战