給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。 這條路徑可以經過也可以不經過根節點。
注意:兩個節點之間的路徑長度由它們之間的邊數表示。
示例 1:
輸入:
5
/ \4 5
/ \ \
1 1 5
輸出:
示例 2:
輸入:
1
/ \4 5
/ \ \
4 4 5
輸出:
注意: 給定的二叉樹不超過10000個結點。 樹的高度不超過1000。
思路:獲取左子樹的最大路徑和右子樹的最大路徑,如果和父節點的值則加一,不相等則最大路徑為0。
將處理後的左子樹路徑和右子樹路徑相加與全域性最大值相比,大於則更新。
將左右子樹的最大路勁返回。
**:
class
solution_687
private
intdfs
(treenode root)
//獲取左右子樹的最大路徑
int left =
dfs(root.left)
;int right =
dfs(root.right)
;//處理左右子樹的路徑,不相等則置為0,相等則加1
int resleft =
0, resright =0;
if(root.left != null && root.left.val == root.val)
if(root.right != null && root.right.val == root.val)
//更新結果
ans = math.
max(ans, resleft + resright)
;//返回路徑最大值
return math.
max(resleft, resright);}
}
LeetCode 687 最長同值路徑
題目描述 給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5 輸出 2 示例 2 輸入 1 4 5 4 4 5 輸出 2 注意 給定的二叉樹不超過10000個結點...
leetcode 687 最長同值路徑
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。此題和leetcode124思路完全相同 題解連線這個題也是這條路徑不能有迴路,也就是這條路徑最多只有乙個節點的兩個子樹都被包括在內,這句話直接理解比...
leetcode 687 最長同值路徑
思路一 看到這個題,我首先想的是,如何尋找必須通過root的同值最長路徑,這是乙個遞迴,遞迴root的左右子樹,尋找同值最長路徑,這個遞迴返回的是最長同值子樹路徑 左右之一 這樣才能保證遞迴一致,想要得到總的最長,在遞迴中新增乙個math.max ans,left right 然後再進行大遞迴,遞迴...