给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出:
2
示例 2:
输入:
1
/ \
4 5
/ \ \
4 4 5
输出:
2
对height改编,返回值改变一下,以及变量在其中
/**
* Definition for a binary tree node.
* public 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;
* }
* }
*/
class Solution {
int path_num = 0;
public int longestUnivaluePath(TreeNode root) {
// 最长同值路径,改编height
if(root==null){
return 0;
}
height(root,root.val);
return path_num;
}
public int height(TreeNode root,int val){
if(root==null){
return 0;
}
int leftheight = height(root.left,root.val);
int rightheight = height(root.right,root.val);
path_num = Math.max(path_num,leftheight+rightheight);// 路径长度为节点数减1所以此处不加1
if(root.val==val){
return Math.max(leftheight,rightheight)+1; // 和父节点值相同才返回以当前节点所能构成的最长通知路径长度, 否则返回0
}else{
return 0;
}
}
}