687. 最长同值路径
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-univalue-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
不能使用从上到下的遍历,因为遍历完左子树的信息,无法传递到右子树。所以要用回溯
int ret = 0;
public int longestUnivaluePath(TreeNode root) {
dfs(root);
return ret;
}
//从上向下不行,因为右孩子无法得到左孩子的更新信息,它的信息只能获得父节点的。
// 所以要回溯。
public int dfs(TreeNode node) {
if(node == null) {
return 0;
}
int left = dfs(node.left);
int right = dfs(node.right);
// 左孩子没有就设置为0
if(node.left == null || node.left.val != node.val) {
// if(node.right == null || node.right.val != node.val) {
// return 0;
// } else {
// ret = Math.max(ret,right+1);
// return right +1;
// }
left = 0;
}
if(node.right == null || node.right.val != node.val) {
// if(node.left == null || node.left.val != node.val) {
// return 0;
// } else {
// ret = Math.max(ret,left+1);
// return left+1;
// }
right = 0;
}
// 由于返回的是Math.max(left,right) +1,所以计算left和right时不用+1;
ret = Math.max(ret,left+right);
return Math.max(left,right) +1;
}