Tree - 687. Longest Univalue Path
时间:2022-07-25
本文章向大家介绍Tree - 687. Longest Univalue Path,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
687. Longest Univalue Path
Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may not pass through the root.
The length of path between two nodes is represented by the number of edges between them.
Example 1:
Input:
5
/
4 5
/
1 1 5
Output: 2
Example 2:
Input:
1
/
4 5
/
4 4 5
Output: 2
Note: The given binary tree has not more than 10000 nodes. The height of the tree is not more than 1000.
思路:
题目意思是找出一个二叉树中值相同的路径的种数,树是天然的递归结构,所以题目几乎都可以用递归求解,仔细思考可以发现,对于任意一个节点,对父级节点,只有两种返回结果,一种是自己的和其中一个孩子节点值相同,向上返回对应的长度,一种是自己和两个子节点相同,那么像外层也就是父级节点返回的就是0,因为不允许路径交叉。所以可以看做一个后序遍历求解。
代码:
go:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func longestUnivaluePath(root *TreeNode) int {
if root == nil {
return 0
}
var res int
univaluePath(root, &res)
return res
}
func univaluePath(node *TreeNode, res *int) int {
if node == nil {
return 0
}
leftLen := univaluePath(node.Left, res)
rightLen := univaluePath(node.Right, res)
var leftPathLen, rightPathLen int
if node.Left != nil && node.Val == node.Left.Val {
leftPathLen = leftLen + 1
}
if node.Right != nil && node.Val == node.Right.Val {
rightPathLen = rightLen + 1
}
*res = max(*res, leftPathLen + rightPathLen)
return max(leftPathLen, rightPathLen)
}
func max(i, j int) int {
if i > j {
return i
}
return j
}
- HDUOJ----4504 威威猫系列故事——篮球梦
- 推荐一款MySQL优化工具
- HDUOJ----4502吉哥系列故事——临时工计划
- HDUOJ----4004The Frog's Games(二分+简单贪心)
- HDUOJ----4006The kth great number(最小堆...)
- HDUOJ----4501小明系列故事——买年货(三维背包)
- message 弹出窗口
- HDUOJ---1862EXCEL排序
- HDUOJ-----3591The trouble of Xiaoqian
- HDUOJ-----2571跳舞毯
- Facebook开源PyTorch版本fairseq翻译模型,训练速度提高50%
- MySQL数据清理的需求分析和改进
- Go 语言常量
- Go 语言结构
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python爬取王者荣耀全套皮肤
- 怎么搭建直播平台,合理使用验证码工具类
- 再见了SpringMVC,这个框架有点厉害,甚至干掉了Servlet!
- 可以旋转的3D韦恩图你见过吗?
- BFE.dev前端刷题 104. 按层遍历DOM树
- nodejs,mongodb不同时区问题
- AkShare-中国宏观-全社会客货运输量
- AkShare-中国宏观-邮电业务基本情况
- AkShare-中国宏观-国际旅游外汇收入构成
- AkShare-中国宏观-民航客座率及载运率
- AkShare-中国宏观-航贸运价指数
- 您应该知道的11个JavaScript和TypeScript速记
- AkShare-中国宏观-央行货币当局资产负债
- AkShare-中国宏观-FR007利率互换曲线
- Github标星59.7k:用动画的形式呈现解LeetCode题目的思路