二元樹的相關題型中,有一個題目叫 Lowest Common Ancestor
我認為是相當經典的。
題目可以參考 Hackerrank
的 Lowest Common Ancestor
以下的
Lowest Common Ancestor
簡稱為lca
題目的意思是:
給定兩個相異樹節點,求出他們的共同祖先,但是公同祖先可能包含多個,因此我們的目標是最接近兩節點的公同祖先。
大概可以以三種情況來概括:(先假設兩節點資料 v1 < v2)
v1 <= root.info <= v2
: root 恰好是 lcav1 < v2 < root.info
: lca 在左子樹root.info < v1 < v2
: lca 在右子樹def lca(root, v1, v2):
if root is None:
return None
if v1 > v2:
v1, v2 = v2, v1
if v1 <= root.info <= v2:
return root
if v1 < v2 < root.info:
return lca(root.left, v1, v2)
else:
return lca(root.right, v1, v2)
這道題目不難,單純只是考考我們對二元搜尋樹的結構而已,但是是個很好的練習