思路一: 看到這個題,我首先想的是,如何尋找必須通過root的同值最長路徑,(這是乙個遞迴,遞迴root的左右子樹,尋找同值最長路徑,這個遞迴返回的是最長同值子樹路徑(左右之一),這樣才能保證遞迴一致,想要得到總的最長,在遞迴中新增乙個math.max(ans, left + right ));
然後再進行大遞迴,遞迴整棵樹,每個節點作為root,呼叫一次上方的遞迴;
所以兩重遞迴,所以執行時間長;
class solution
public int longroot(treenode root)
}
思路二:與思路一的區別在於,在尋找最長路徑中,思路一,採取的方案 :如果左孩子或右孩子,不等於根節點的值,就不進行遞迴;
思路二則是動態的,如果發現值不同,又把路徑長置為0,繼續遞迴,所以一次遞迴即可
private int path = 0;
public int longestunivaluepath(treenode root)
private int dfs(treenode root)
LeetCode 687 最長同值路徑
題目描述 給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5 輸出 2 示例 2 輸入 1 4 5 4 4 5 輸出 2 注意 給定的二叉樹不超過10000個結點...
leetcode 687 最長同值路徑
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。此題和leetcode124思路完全相同 題解連線這個題也是這條路徑不能有迴路,也就是這條路徑最多只有乙個節點的兩個子樹都被包括在內,這句話直接理解比...
Leetcode 687 最長同值路徑
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5 輸出 2 示例 2 輸入 1 4 5 4 4 5 輸出 思路 暴力dfs,dfs函式表示該結點左子樹或右子樹中...