題目:
思路+代碼:
思路:找就近的祖先節點,採用遞歸方法,考慮3種邊界情況,
邊界情況:
1. p,q在左右兩邊
2. p,q都在左子樹或右子樹
3. p或q有一個是根節點
遞歸結束:如果not root, 找到節點爲p或q,return root
當前層遞歸:
返回值:在左子樹和右子樹進行遞歸,並判斷如果左子樹返回值爲空,則說明左子樹不存在,則返回右子樹,同理右子樹; 如果左右子樹同時存在值則返回 root爲最近祖先節點
class Solution:
def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
# 思路:找就近的祖先節點,採用遞歸方法,考慮3種邊界情況,
# 邊界情況:
# 1. p,q在左右兩邊
# 2. p,q都在左子樹或右子樹
# 3. p或q有一個是根節點
# 遞歸結束:如果not root, 找到節點爲p或q,return root
# 當前層遞歸:
# 返回值:在左子樹和右子樹進行遞歸,並判斷如果左子樹返回值爲空,則說明左子樹不存在,則返回右子樹,同理右子樹; 如果左右子樹同時存在值則返回 root爲最近祖先節點
if not root or root==p or root == q: return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
if not left: return right
if not right: return left
return root # 如果left 和 right都不爲空,則返回根節點