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