注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出:
2
示例 2:
输入:
1
/ \
4 5
/ \ \
4 4 5
输出:
2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。
这个是用递归解决,答案给的代码太美了。
/*讲真,这个代码的可以 写的可以吹一波
*/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int ans;
public int longestUnivaluePath(TreeNode root) {
ans = 0;
arrowLength(root);
return ans;
}
public int arrowLength(TreeNode node){
if(node == null)
return 0;
int left = arrowLength(node.left);
int right = arrowLength(node.right);
int arrowLeft = 0;
int arrowRight = 0;
if(node.left != null && node.left.val == node.val)
arrowLeft = left + 1 ;
if(node.right != null && node.right.val == node.val)
arrowRight = right + 1 ;
ans = Math.max(ans,arrowLeft + arrowRight);
return Math.max(arrowLeft,arrowRight);
}
}
看起来没什么,你自己动手写,逻辑上没什么问题,但是写不到这么美。
ans = Math.max(ans,arrowLeft+arrowRight);
这一行包含了很多东西。几种可能都在这里面体现了。
先将
arrowLeft = 0 ,arroeRight = 0
后来的 都能用
ans = Math.max(ans,arrowLeft+arrowRight);
包括!
网友评论