Python知識分享網(wǎng) - 專業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
labuladong的刷題筆記V2.0(力扣版) PDF 下載
匿名網(wǎng)友發(fā)布于:2023-10-29 10:45:55
(侵權(quán)舉報(bào))
(假如點(diǎn)擊沒反應(yīng),多刷新兩次就OK!)

labuladong的刷題筆記V2.0(力扣版) PDF 下載  圖1

 

 

 

 

資料內(nèi)容:

 

 

基本思路
經(jīng)典問題了,先給出遞歸函數(shù)的定義:給該函數(shù)輸?三個(gè)參數(shù) rootp,q,它會返回?個(gè)節(jié)點(diǎn):
情況 1,如果 p q 都在以 root 為根的樹中,函數(shù)返回的即使 p q 的最近公共祖先節(jié)點(diǎn)。
情況 2,那如果 p q 都不在以 root 為根的樹中怎么辦呢?函數(shù)理所當(dāng)然地返回 null 唄。
情況 3,那如果 p q 只有?個(gè)存在于 root 為根的樹中呢?函數(shù)就會返回那個(gè)節(jié)點(diǎn)。
根據(jù)這個(gè)定義,分情況討論:
情況 1,如果 p q 都在以 root 為根的樹中,那么 left right ?定分別是 p q(從 base case 看出
來的)。
情況 2,如果 p q 都不在以 root 為根的樹中,直接返回 null
情況 3,如果 p q 只有?個(gè)存在于 root 為根的樹中,函數(shù)返回該節(jié)點(diǎn)。
詳細(xì)題解:Git原理之最近公共祖先
解法代碼
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p,
TreeNode q) {
// base case
if (root == null) return null;
if (root == p || root == q) return root;
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
// 情況 1
if (left != null && right != null) {
return root;
}
// 情況 2
if (left == null && right == null) {
return null;
}
// 情況 3
return left == null ? right : left;
}
}