687 最長同值路徑

2021-10-08 06:45:18 字數 1298 閱讀 7600

題目描述:

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

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

示例 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個結點...