2021 02 20 最長同值路徑

2021-10-19 15:16:40 字數 805 閱讀 5940

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

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

示例 1:

輸入:

5

/ \4 5

/ \ \

1 1 5

輸出:2

示例 2:

輸入:

1

/ \4 5

/ \ \

4 4 5

輸出:2

本題的最長路徑可以分兩種情況:

第一種,是從直線到葉子節點,如示例1;

第二種,是帶拐點,如示例2;

求解時,我通過計數連續的相同結點個數,然後返回結點個數-1即最長路徑。

思路如下:

設定乙個全域性變數l,儲存最大結點個數

遞迴處理每個結點,並將本結點的值傳給下乙個處理的結點,分別獲取左子樹、右子樹和本結點相同的的結點個數ll、lr

求出路徑長度,並和l比較取較大值。

這裡無論是第一種還是第二種情況,此時的最長路徑長度均是:左子樹個數ll + 右子樹個數lr + 1

返回相同結點個數的值

如果本結點和上一結點傳入值相同,則返回max(ll,lr)+1;

如果本結點和上一結點傳入值不同,則返回0;

class

solution

intgetlongest

(treenode* root ,

int nval)

};

最長同值路徑

題目力扣鏈結 給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。例項1 輸入 輸出 2 輸入 看到二叉樹的題,首先要想到遞迴。首先,要想得到等值路徑,需要該節點的左孩子的等值路徑和該節點右孩子的等值路...

最長同值路徑

給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5輸出 2示例 2 輸入 1 4 5 4 4 5輸出 2注意 給定的二叉樹不超過10000個結點。樹的高度不超過1...

687 最長同值路徑

給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。這條路徑可以經過也可以不經過根節點。注意 兩個節點之間的路徑長度由它們之間的邊數表示。示例 1 輸入 5 4 5 1 1 5 輸出 2示例 2 輸入 1 4 5 4 4 5 輸出 2注意 給定的二叉樹不超過10000個結點。樹的高度不超...