leetcode 687. 最长同值路径
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出:
2
示例 2:
输入:
1
/ \
4 5
/ \ \
4 4 5
输出:
2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-univalue-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
递归遍历树,判断左右节点和本节点是否相等,若是相等,则加上左右节点的值为新值,并取左右节点+1的值和最大值中较大值。返回左右节点中新值较大的+1.
/** * 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 max = 1; public int longestUnivaluePath(TreeNode root) { find(root); return max - 1; } private int find (TreeNode root) { if (root == null) { return 0; } int l = 0; int r = 0; if (root.left != null) { int i = find(root.left); if (root.val == root.left.val) { l = i; } } if (root.right != null) { int i = find(root.right); if (root.val == root.right.val) { r = i; } } max = Math.max(l + r + 1, max); return Math.max(l, r) + 1; } }