88. 最近公共祖先
阿新 • • 發佈:2020-08-01
88.最近公共祖先
中文English給定一棵二叉樹,找到兩個節點的最近公共父節點(LCA)。
最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。
樣例
樣例 1:
輸入:{1},1,1
輸出:1
解釋:
二叉樹如下(只有一個節點):
1
LCA(1,1) = 1
樣例 2:
輸入:{4,3,7,#,#,5,6},3,5
輸出:4
解釋:
二叉樹如下:
4
/ \
3 7
/ \
5 6
LCA(3, 5) = 4
注意事項
假設給出的兩個節點都在樹中存在
輸入測試資料(每行一個引數)如何理解測試資料?""" Definition of TreeNode: class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None """ class Solution: """ @param: root: The root of the binary search tree. @param: A: A TreeNode in a Binary. @param: B: A TreeNode in a Binary. @return: Return the least common ancestor(LCA) of the two nodes.""" def lowestCommonAncestor(self, root, A, B): # write your code here #如果root為空的話 if not root: return None #如果A為B的父節點,或者是B為A的父節點 if root == A or root == B: return root #dfs left = self.lowestCommonAncestor(root.left, A, B) right= self.lowestCommonAncestor(root.right, A, B) #排除上面兩種情況後,不斷的往回找,往父節點找 #遍歷完後,判斷left,和right是否為None,如果不為,則最小父節點為root if left and right: return root #如果left,right不在同一邊,則root是A和B的LCA,否則,如果是同一邊,要麼LCA是A,要麼是B if left: return left if right: return right return None