88 最近公共祖先

2022-02-14 21:23:25 字數 1469 閱讀 7138

中文english

給定一棵二叉樹,找到兩個節點的最近公共父節點(lca)。

最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。

樣例 1:

輸入:,1,1

輸出:1

解釋: 二叉樹如下(只有乙個節點):

1lca(1,1) = 1

樣例 2:

輸入:,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為空的話

ifnot 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

LintCode 88 最近公共祖先

給定一棵二叉樹,找到兩個節點的最近公共父節點 lca 最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。假設給出的兩個節點都在樹中存在 樣例 樣例 1 輸入 1,1 輸出 1 解釋 二叉樹如下 只有乙個節點 1lca 1,1 1 樣例 2 輸入 3,5 輸出 4 解釋 二叉樹如下 4 3 7 5...

LintCode 88 最近公共祖先

給定一棵二叉樹,找到兩個節點的最近公共父節點 lca 最近公共祖先是兩個節點的公共的祖先節點且具有最大深度。注意事項 假設給出的兩個節點都在樹中存在 樣例對於下面這棵二叉樹 標籤code definition of treenode class treenode class solution pat...

最近公共祖先 python 最近公共祖先

lca演算法樸素演算法 也就是我們所說的暴力演算法,大致的思路是從樹根開始,往下迭代,如果當前結點比兩個結點都小,那麼說明要從樹的右子樹中找 相反則從左子樹中查詢 直到找到乙個結點在當前結點的左邊,乙個在右邊,說明當前結點為最近公共祖先,如果乙個結點是另外乙個結點的祖先,那麼返回前面結點的父親結點即...