package com.算法专练.力扣.最长同值路径;
/**
* @author xnl
* @Description:
* @date: 2022/9/2 23:08
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
}
int res = 0;
public int longestUnivaluePath(TreeNode root) {
dfs(root);
return res;
}
/**
* 只需要计算左右两边的最大值即可
* 需要先序遍历,然后计算结果
* 如果说左边和当前值,相等,length = left + 1 ,否则0
* 右边也是如果,每一层都这样进行计算即可
* 递归,把问题最小化,然后和并结果
* @param node
* @return
*/
private int dfs(TreeNode node){
if (node == null){
return 0;
}
int left = dfs(node.left), right = dfs(node.right);
int l = 0, r = 0;
if (node.left != null && node.left.val == node.val){
l = left + 1;
}
if (node.right != null && node.right.val == node.val){
r = right + 1;
}
res = Math.max(res , l + r);
return Math.max(l, r);
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
力扣:687. 最长同值路径
于 2022-09-02 23:29:12 首次发布