687. Longest Univalue Path(相同节点值的最大路径长度)

Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may not pass through the root.

Note: The length of path between two nodes is represented by the number of edges between them.

Example 1:

Input:

              5
             / 
            4   5
           /    
          1   1   5

Output:

2

Example 2:

Input:

              1
             / 
            4   5
           /    
          4   4   5

Output:

2

Note: The given binary tree has not more than 10000 nodes. The height of the tree is not more than 1000.

方法一:递归

因为这道题求的是相同结点的最大路径,肯定需要从根节点遍历到尾部。遍历树一般用递归比较方便。递归调用是从根往子叶上调,但是返回是子叶往根返回。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private int path=0;
    public int longestUnivaluePath(TreeNode root) {
        dfs(root);
        return path;
    }
    private int dfs(TreeNode root){
        if(root==null) return 0;
        int left=dfs(root.left);   
        int right=dfs(root.right); 
        int leftPath=root.left!=null&&root.left.val==root.val?left+1:0;  //如果左孩子和父节点相同,则多了一条路径
        int rightPath=root.right!=null&&root.right.val==root.val?right+1:0; //如果右孩子和父节点相同,则多了一条路径
        path=Math.max(path,leftPath+rightPath);  
        return Math.max(leftPath,rightPath);
    }
}
苟有恒,何必三更眠五更起;最无益,莫过一日暴十日寒。
原文地址:https://www.cnblogs.com/shaer/p/10594854.html