給定乙個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。 這條路徑可以經過也可以不經過根節點。
注意:兩個節點之間的路徑長度由它們之間的邊數表示。
示例 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個結點。樹的高度不超...