687. El valor de la ruta con el más largo
Dado un árbol binario, para encontrar los caminos más largos, cada nodo en esta ruta tiene el mismo valor. Este camino puede o no puede pasar a través del nodo raíz.
Nota: la longitud de la trayectoria entre dos nodos está representado por el número de bordes entre los mismos.
Ejemplo 1:
entrada:
5
/ \
4 5
/ \ \
1 1 5
salida:
2
Ejemplo 2:
entrada:
1
/ \
4 5
/ \ \
4 4 5
salida:
2
Nota: el árbol binario dado no más de 10.000 nodos. Altura del árbol no exceda de 1000.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private int maxL = 0;
public int longestUnivaluePath(TreeNode root) {
if(root == null) return 0;
getMaxL(root, root.val);
return maxL;
}
private int getMaxL(TreeNode r, int val) {
if(r == null) return 0;
int left = getMaxL(r.left, r.val);
int right = getMaxL(r.right, r.val);
maxL = Math.max(maxL, left+right); // 路径长度为节点数减1所以此处不加1
if(r.val == val) // 和父节点值相同才返回以当前节点所能构成的最长通知路径长度, 否则返回0
return Math.max(left, right) + 1;
return 0;
}
}