给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
5
/ \
4 5
/ \ \
1 1 5
输出为2
1
/ \
4 5
/ \ \
4 4 5
输出为3
题目分析:
根据题目我们可以清晰的分析出每个节点有三种情况
例如 节点 root
情况1:左孩子的值和右孩子的值与root的值相同。
情况2:左孩子的值与root的值不相同,但右孩子的值与root的值相同。
情况3:右孩子的值与root的值不相同,但左孩子的值与root的值相同。
情况4:左孩子的值和右孩子的值与root的值都不相同。
针对每个种情况我们再分析对应的结果:
情况1:root的路径=左孩子的路径+右孩子的路径+2
情况2:root的路径 = 左孩子的路径+1
情况3:root的路径 = 右孩子的路径+1
情况4:root的路径 = 0;
返回结果:左孩子的路径和右孩子的路径之间最大的那个。
设置全局变量ans记录最大路径,采用递归的方式以后序遍历的流程对每个节点进行计算。
代码如下:
Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int<