236 二叉樹的最近公共祖先

2021-10-25 15:38:59 字數 1170 閱讀 5249

可以歸納出三種情況:

1.若在root的左右子樹中找到,那麼root一定是最近公共節點

2.若在root.left中找到,那麼就可以返回left

3.若在root.right中找到,那麼就可以返回right

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

lowestcommonancestor

(self, root:

'treenode'

, p:

'treenode'

, q:

'treenode')-

>

'treenode':if

not root:

return

none

# 邊界條件,如果匹配到left或right就直接返回停止遞迴

if root.val == p.val or root.val == q.val:

return root

# 這兩行**可以無腦先寫好!

# 因為是dfs演算法,這個模板可以無腦套用,寫上之後可能你思路就清晰很多

left = self.lowestcommonancestor(root.left, p, q)

right = self.lowestcommonancestor(root.right, p, q)

# 如果既在左子樹找到,又在右子樹找到,那麼毫無疑問當前root就是公共節點

if left and right:

return root

# 只有左子樹有,那麼直接返回左子樹匹配到的第乙個節點

if left:

return left

if right:

return right

236 二叉樹最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。最近公共祖先的定義為 對於有根樹 t 的兩個結點 p q,最近公共祖先表示為乙個結點 x,滿足 x 是 p q 的祖先且 x 的深度盡可能大 乙個節點也可以是它自己的祖先 例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,nu...

236 二叉樹的最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1輸出 3解釋 節點5和節點1的最近公共祖先是節點3。示例 2 ...

236 二叉樹的最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 ...