1. 程式人生 > >leetcode 687. 最長同值路徑(Longest Univalue Path)

leetcode 687. 最長同值路徑(Longest Univalue Path)

給定一個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。 這條路徑可以經過也可以不經過根節點。

注意:兩個節點之間的路徑長度由它們之間的邊數表示。

示例 1:

輸入:

              5
             / \
            4   5
           / \   \
          1   1   5

輸出:

2

示例 2:

輸入:

              1
             / \
            4   5
           / \   \
          4   4   5

輸出:

2

注意: 給定的二叉樹不超過10000個結點。 樹的高度不超過1000。

思路:

 遞迴,在左孩子和右孩子為節點與自身為節點,此3個值繼續比較,一直遞迴下去,這題程式碼簡潔,也對遞迴和樹有了更深的瞭解,還是對自己的提升蠻有幫助的

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int longestUnivaluePath(TreeNode root) {
        if(root == null)
        	return 0;
        int children = Math.max(longestUnivaluePath(root.left), longestUnivaluePath(root.right));
        return Math.max(children, findPath(root.left,root.val) + findPath(root.right,root.val));
    }
    
    static int findPath(TreeNode root, int val) {
    	if(root == null || root.val != val)
    		return 0;
    	
    	return 1+Math.max(findPath(root.left, val), findPath(root.right, val));
    }
}