687. 最长同值路径

给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。

注意:两个节点之间的路径长度由它们之间的边数表示。

示例 1:

输入:

5
/
4 5
/
1 1 5
输出:

2

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-univalue-path

 1 package leetCode.binaryTree;
 2 public class LongestUnivaluePath {
 3     static class TreeNode {
 4         int val;
 5         TreeNode left;
 6         TreeNode right;
 7         TreeNode(int x) {
 8             val = x;
 9         }
10     }
11  
12     private int res = 0;
13     public int longestUnivaluePath(TreeNode root) {
14           path(root);
15         return res;
16     }    
17     
18     public int path(TreeNode node) {
19         if(node == null) {
20             return 0;
21         }
22         int left = path(node.left);
23         int right = path(node.right);
24         //对于最后的叶子节点所以需要判断是否为空,左子结点存在且和当前节点值相同,则left自增1,否则left重置0;
25         left = (node.left != null && node.val == node.left.val) ? left + 1 : 0;
26         //如果其右子结点存在且和当前节点值相同,则right自增1,否则right重置0       
27         right = (node.right != null && node.val == node.right.val) ? right + 1 : 0;
28         res = Math.max(res, left + right);  
29         return Math.max(left, right);  //返回的该子树的左右子树的最长路径(包括根节点,但是不横跨根节点)
30     } 
31 }
无论有多困难,都坚强的抬头挺胸,人生是一场醒悟,不要昨天,不要明天,只要今天。不一样的你我,不一样的心态,不一样的人生,顺其自然吧
原文地址:https://www.cnblogs.com/xiyangchen/p/11107753.html