687 最長同值路徑

2021-08-25 08:36:34 字數 1818 閱讀 5111

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

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

示例 1:

輸入:

5/ \

4 5

/ \ \

1 1 5

輸出:2

示例 2:

輸入:

1/ \

4 5

/ \ \

4 4 5

輸出:2

注意: 給定的二叉樹不超過10000個結點。 樹的高度不超過1000。

分析:考察二叉樹的遞迴

首先判斷二叉樹root是否為空,如果是直接返回0,之後對左右子結點分別呼叫當前函式,取其中較大值儲存到臨時變數,表示左右子樹中最長的同值路徑,然後跟當前樹的最長同值路徑進行比較,對左右子結點呼叫dfs函式,並傳入當前結點值,將返回值與臨時變數比較取較大值

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

int left =

dfs(root-

>left)

;int right =

dfs(root-

>right);if

(root-

>left !=

null

&& root-

>left-

>val == root-

>val)

else

if(root-

>right !=

null

&& root-

>right-

>val == root-

>val)

else

res =

max(res, left + right)

;return

max(left, right);}

intlongestunivaluepath

(treenode* root)

dfs(root)

;return res;}}

;

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

int sub =

max(

longestunivaluepath

(root-

>left)

,longestunivaluepath

(root-

>right));

return

max(sub,

dfs(root-

>left, root-

>val)

+dfs

(root-

>right, root-

>val));

}int

dfs(treenode* node,

int parent)

return1+

max(

dfs(node-

>left, node-

>val)

,dfs

(node-

>right, node-

>val));

}};

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