1. 程式人生 > 實用技巧 >88. 最近公共祖先

88. 最近公共祖先

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