给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出:
2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-univalue-path
1 package leetCode.binaryTree; 2 public class LongestUnivaluePath { 3 static class TreeNode { 4 int val; 5 TreeNode left; 6 TreeNode right; 7 TreeNode(int x) { 8 val = x; 9 } 10 } 11 12 private int res = 0; 13 public int longestUnivaluePath(TreeNode root) { 14 path(root); 15 return res; 16 } 17 18 public int path(TreeNode node) { 19 if(node == null) { 20 return 0; 21 } 22 int left = path(node.left); 23 int right = path(node.right); 24 //对于最后的叶子节点所以需要判断是否为空,左子结点存在且和当前节点值相同,则left自增1,否则left重置0; 25 left = (node.left != null && node.val == node.left.val) ? left + 1 : 0; 26 //如果其右子结点存在且和当前节点值相同,则right自增1,否则right重置0 27 right = (node.right != null && node.val == node.right.val) ? right + 1 : 0; 28 res = Math.max(res, left + right); 29 return Math.max(left, right); //返回的该子树的左右子树的最长路径(包括根节点,但是不横跨根节点) 30 } 31 }
原文地址:https://www.cnblogs.com/xiyangchen/p/11107753.html
时间: 2024-10-09 17:37:14