给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5 / \ 4 5 / \ \ 1 1 5
输出:
2
示例 2:
输入:
1 / \ 4 5 / \ \ 4 4 5
输出:
2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。
思路:
递归,在左孩子和右孩子为节点与自身为节点,此3个值继续比较,一直递归下去,这题代码简洁,也对递归和树有了更深的了解,还是对自己的提升蛮有帮助的
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int longestUnivaluePath(TreeNode root) {
if(root == null)
return 0;
int children = Math.max(longestUnivaluePath(root.left), longestUnivaluePath(root.right));
return Math.max(children, findPath(root.left,root.val) + findPath(root.right,root.val));
}
static int findPath(TreeNode root, int val) {
if(root == null || root.val != val)
return 0;
return 1+Math.max(findPath(root.left, val), findPath(root.right, val));
}
}