4.5 面試例題:最低公共祖先
已知二元搜索樹上兩個結點的值,請找出它們的公共祖先。你可以假設這兩個值肯定存在。這個函數(shù)的調(diào)用接口如下所示: int FindLowestCommonAncestor(node *root, int value1, int value2); 算法1: 從兩個給定結點的結點出發(fā)進行回溯,兩條回溯路線的交點就是我們要找的東西。這個算法的具體實現(xiàn)辦法是:先用這兩個結點的全體祖先分別生成兩個鏈表,再把這兩個鏈表第一次出現(xiàn)不同結點的位置找出來,則它們的前一個結點就是我們要找的東西。 算法2: 從根結點出發(fā),沿著兩個結定結點的公共祖先前進。當這兩個結點的值同時小于當前結點的值時,沿左指針前進;當這兩個結點的值同時大于當前結點的值時,沿右指針前進;當?shù)谝淮斡龅疆斍敖Y點的值介于兩個給定的結點值之間的情況時,這個當前結點就是我們要找的最低公共祖先了。 int FindLowestCommonAncestor(node *root, int value1, int value2) |
|
來自: shaobin0604@1... > 《找工作》