给定一个二叉树,
找到最长的路径,
这个路径中的每个节点具有相同值。
这条路径可以经过也可以不经过根节点。
输入
5 / \ 4 5 / \ \ 1 1 5
输出: 2
输入
1 / \ 4 5 / \ \ 4 4 5
输出 2
给定的二叉树不超过10000个结点。 树的高度不超过1000。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var longestUnivaluePath = function(root) {
if (!root) {
return 0;
}
let left = findValPath(root.left, root.val)
let right = findValPath(root.right, root.val)
return Math.max(left.max, right.max, left.count + right.count);
};
const findValPath = (node, val) => {
let count = findValCount(node, val);
let max = longestUnivaluePath(node);
return { count, max };
}
const findValCount = (node, val) => {
if (!node || node.val !== val) {
return 0
}
return Math.max(findValCount(node.left, val), findValCount(node.right, val)) + 1;
}
执行用时 : 232 ms, 在所有 JavaScript 提交中击败了98.77%的用户
内存消耗 : 62.9MB, 在所有 JavaScript 提交中击败了8.33%的用户