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