leetcode 687. 最長同值路徑(Longest Univalue Path)
阿新 • • 發佈:2018-12-10
給定一個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。 這條路徑可以經過也可以不經過根節點。
注意:兩個節點之間的路徑長度由它們之間的邊數表示。
示例 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)); } }