尋找最小的祖先

2021-08-25 18:40:58 字數 391 閱讀 7267

題目:給定乙個binary search tree 和兩個節點,尋找這兩個節點的最小公共祖先。

首先要盡快給出最直接的辦法,不要管效率的問題。

可以利用額外的儲存空間來解決這個問題,先用dfs分別尋找到這兩個元素,並且記錄下尋找過程中遍歷的元素,得到兩個陣列。然後挨個比較陣列中的元素,直到出現不同的為止。

這個演算法首先需要額外空間,其次如果這兩個元素層數很多,而且bst不是平衡的話,dfs很耗時間。

最優演算法:

利用bst的特點,通過觀察可以看到,最小的公共祖先相比其他的公共祖先來說,是第乙個也是唯一乙個值介於兩者之間的。所以可以得到最優演算法:

1. 從root開始,如果節點value比兩個值都大,遍歷左孩子;否則,遍歷右孩子

2. 直到出現在兩者之間的值停止。

樹形結構 尋找共同祖先

輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 3。class bintnode def init self,data none left none right none self.data data...

尋找最近公共祖先演算法(LCA)

最近做乙個功能,需要對場景圖中的多個節點回溯其最近公共祖先,這是乙個常用的應用,搜尋了一下,有tarjan演算法。tarjan演算法是一種離線演算法,它需要一次輸入所有的詢問,然後有根節點開始進行深度優先遍歷 dfs 在深度優先遍歷的過程中,進行並查集 見文章參考鏈結 的操作,同時查詢詢問,返回結果...

尋找區域性最小

定義區域性最小的概念。arr長度為1時,arr 0 是區域性最小。arr的長度為n n 1 時,如果arr 0 區域性最小的概念和極小值是一樣的,先判斷邊界,如果arr 0 的值比arr 1 小,arr n 1 的值比arr n 2 小,則arr 0 和arr n 1 也是區域性最小。如果上面兩種都...