題目描述:
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。 這條路徑可以經過也可以不經過根節點。
注意:兩個節點之間的路徑長度由它們之間的邊數表示。
示例 1:
輸入:
5
/ \4 5
/ \ \
1 1 5
輸出:
2示例 2:
輸入:
1
/ \4 5
/ \ \
4 4 5
輸出:
2注意:給定的二叉樹不超過10000個結點。 樹的高度不超過1000。
方法1:遞迴
主要思路:
(1)對題目進行分析,求最大的相同數值的路徑,對於當前結點作為根節點的話,若是當前結點的值和左子樹的值相等,則可以將左子樹到達此處時其相同的路徑長度值加一,否則,就是0,因為已經值不相同了;
(2)同樣,對於右子樹,若是當前結點的值和右子樹的值相等,則可以將右子樹到達此處時其相同的路徑長度值加一,否則,就是0,因為已經值也不相同了;
(3)則對於當前結點作為根節點,則此時將其作為路徑的中間值,既左子樹的路徑值加上右子樹的路徑值之和,為乙個可能的最長相同路徑值,進行判斷保留;
(4)則若是將當前結點作為路徑中的乙個子樹的部分,則需要在左右子樹中選擇乙個較大的值,作為其當前路徑的值,作為函式的返回值,接著向上回退,找可能的更大的值;
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
if(root-
>right&&root-
>val==root-
>right-
>val)
count=
max(count,right_path+left_path)
;//保留可能的最大值,既將當前根節點作為路徑的中間值,不向上回退
return
max(left_path,right_path)
;//將當前結點作為子樹路徑的一部分,在左右子樹中選個較大的,接著向上回退
}int
longestunivaluepath
(treenode* root)
};
687 最長同值路徑
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5 輸出 2示例 2 輸入 1 4 5 4 4 5 輸出 2注意 給定的二叉樹不超過10000個結點。樹的高度不超...
leetcode 遞迴 687 最長同值路徑
給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5輸出 2示例 2 輸入 1 4 5 4 4 5輸出 2注意 給定的二叉樹不超過10000個結點。樹的高度不超過1...
LeetCode 687 最長同值路徑
題目描述 給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5 輸出 2 示例 2 輸入 1 4 5 4 4 5 輸出 2 注意 給定的二叉樹不超過10000個結點...