日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

程序員面試攻略 4.5 面試?yán)}:最低公共祖先

 shaobin0604@163.com 2006-10-23
4.5 面試?yán)}:最低公共祖先
已知二元搜索樹(shù)上兩個(gè)結(jié)點(diǎn)的值,請(qǐng)找出它們的公共祖先。你可以假設(shè)這兩個(gè)值肯定存在。這個(gè)函數(shù)的調(diào)用接口如下所示:
int FindLowestCommonAncestor(node *root, int value1, int value2);

算法1:
從兩個(gè)給定結(jié)點(diǎn)的結(jié)點(diǎn)出發(fā)進(jìn)行回溯,兩條回溯路線的交點(diǎn)就是我們要找的東西。這個(gè)算法的具體實(shí)現(xiàn)辦法是:先用這兩個(gè)結(jié)點(diǎn)的全體祖先分別生成兩個(gè)鏈表,再把這兩個(gè)鏈表第一次出現(xiàn)不同結(jié)點(diǎn)的位置找出來(lái),則它們的前一個(gè)結(jié)點(diǎn)就是我們要找的東西。

算法2:
從根結(jié)點(diǎn)出發(fā),沿著兩個(gè)結(jié)定結(jié)點(diǎn)的公共祖先前進(jìn)。當(dāng)這兩個(gè)結(jié)點(diǎn)的值同時(shí)小于當(dāng)前結(jié)點(diǎn)的值時(shí),沿左指針前進(jìn);當(dāng)這兩個(gè)結(jié)點(diǎn)的值同時(shí)大于當(dāng)前結(jié)點(diǎn)的值時(shí),沿右指針前進(jìn);當(dāng)?shù)谝淮斡龅疆?dāng)前結(jié)點(diǎn)的值介于兩個(gè)給定的結(jié)點(diǎn)值之間的情況時(shí),這個(gè)當(dāng)前結(jié)點(diǎn)就是我們要找的最低公共祖先了。

int FindLowestCommonAncestor(node *root, int value1, int value2)
{
 node *curNode = root;
 for (;;) {
  if (curNode->value > value1 && curNode->value > value2)
   curNode = curNode->left;
  else if (curNode->value < value1 && curNode->value < value2)
   curNode = curNode->right;
  else
   return curNode->value;
 }
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多