C語言/C++編程數(shù)據(jù)結(jié)構(gòu)與算法學(xué)習(xí),二叉搜索樹查找

C語言是面向過程的读串,而C++是面向?qū)ο蟮?/p>

C和C++的區(qū)別:

C是一個(gè)結(jié)構(gòu)化語言聊记,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程恢暖,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)排监。

C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型杰捂,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問題域舆床,這樣就可以通過獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn)挨队,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”谷暮。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn)瞒瘸,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”坷备,而就語言本身而言熄浓,在C中更多的是算法的概念情臭。那么是不是C就不重要了,錯(cuò)赌蔑!算法是程序設(shè)計(jì)的基礎(chǔ)俯在,好的設(shè)計(jì)如果沒有好的算法,一樣不行娃惯。而且跷乐,“C加上好的設(shè)計(jì)”也能寫出非常好的東西。

很多小伙伴都老是會(huì)碰到疑問趾浅,其實(shí)還是基礎(chǔ)沒打扎實(shí)愕提,這些題如果你不看答案你能知道多少呢?如果還有很多不知道就證明基礎(chǔ)沒打扎實(shí)皿哨,如果你還在入門糾結(jié)浅侨,如果你還在苦惱怎么入門!小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九证膨,四七零如输,五九六 】,無論你是大牛還是小白央勒,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)不见!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享崔步!

在二叉樹遍歷一文中主要介紹了二叉搜索樹的遍歷,本文將繼續(xù)介紹二叉搜索樹的查找稳吮。

二搜索叉樹的查找主要涉及到查找指定的元素節(jié)點(diǎn)、最大最小查找井濒,查找指定節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)或者后繼節(jié)點(diǎn)盖高。下面分別介紹。

查找指定元素

二搜索叉樹查找一個(gè)給定值key的過程與二分查找類似眼虱,其過程為:首先是關(guān)鍵字key與樹根的關(guān)鍵字進(jìn)行比較喻奥,如果key大比根的關(guān)鍵字大,則在根的右子樹中查找捏悬,否則在根的左子樹中查找撞蚕,重復(fù)此過程,直到找到遇到空結(jié)點(diǎn)為止过牙,如下圖就是查找key為2節(jié)點(diǎn)過程甥厦。

根據(jù)查找過程纺铭,下面給出了遞歸和非遞歸的代碼實(shí)現(xiàn)如下:

查找最大值最小值

根據(jù)二叉搜索樹的性質(zhì),很容易想到:一顆非空的二叉搜索樹查找其最大值流程很簡(jiǎn)單:只需要從根節(jié)點(diǎn)遞歸的遍歷到右子樹節(jié)點(diǎn)即可刀疙。當(dāng)遍歷到節(jié)點(diǎn)的右孩子為NULL時(shí)舶赔,則這個(gè)節(jié)點(diǎn)就是樹的最大值,如下圖所示谦秧。

同理竟纳,查找其最小值流程類似:從根節(jié)點(diǎn)遞歸的遍歷到左子樹節(jié)點(diǎn)即可。當(dāng)遍歷到節(jié)點(diǎn)的左孩子為NULL時(shí)疚鲤,則這個(gè)節(jié)點(diǎn)就是樹的最小值锥累。

下面給出了查找最大值的代碼實(shí)現(xiàn),最小值類似集歇,大家可以自己試著實(shí)現(xiàn)最小值查找桶略。

查找前驅(qū)和后繼節(jié)點(diǎn)

這里說的一個(gè)節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)指的是中序遍歷順序下某個(gè)節(jié)點(diǎn)的前驅(qū)和后繼;更為詳細(xì)的說就是:對(duì)于二叉搜索樹诲宇,某一結(jié)點(diǎn)x的前驅(qū)就是小于key[x]的所有關(guān)鍵字中最大的那個(gè)結(jié)點(diǎn)际歼,后繼即是大于key[x]中的所有關(guān)鍵字中最小的那個(gè)結(jié)點(diǎn)。

查找前驅(qū)步驟:

(1)先判斷節(jié)點(diǎn)x是否有左子樹姑蓝,如果有左子樹則其左子樹的最大節(jié)點(diǎn)即是x的前驅(qū)鹅心;

(2)如果沒有左子樹,但是該節(jié)點(diǎn)是其父節(jié)點(diǎn)的右孩子它掂,那么父節(jié)點(diǎn)就是該節(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)巴帮;

(3)如果沒有左子樹,但是該節(jié)點(diǎn)是其父節(jié)點(diǎn)的左孩子虐秋,那么需要沿著其父親節(jié)點(diǎn)一直向樹的頂端尋找榕茧,直到找到一個(gè)節(jié)點(diǎn)P,P節(jié)點(diǎn)是其父節(jié)點(diǎn)Q的右邊孩子客给,那么Q就是該節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)用押。

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零靶剑,五九六 】蜻拨,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)桩引!裙內(nèi)有開發(fā)工具缎讼,很多干貨和技術(shù)資料分享!

查找后繼節(jié)點(diǎn)的步驟:

(1)先判斷節(jié)點(diǎn)x是否有子樹坑匠,如果右子樹則其右子樹的最小節(jié)點(diǎn)即是x的前驅(qū)血崭;

(2)如果沒有右子樹,但是該節(jié)點(diǎn)是其父節(jié)點(diǎn)的左孩子,那么父節(jié)點(diǎn)就是該節(jié)點(diǎn)的后繼結(jié)點(diǎn)夹纫;

(3)如果沒有右子樹咽瓷,但是該節(jié)點(diǎn)是其父節(jié)點(diǎn)的右孩子,那么需要沿著其父親節(jié)點(diǎn)一直向樹的頂端尋找舰讹,直到找到一個(gè)節(jié)點(diǎn)P茅姜,P節(jié)點(diǎn)是其父節(jié)點(diǎn)Q的左邊孩子,那么Q就是該節(jié)點(diǎn)的后繼節(jié)點(diǎn)月匣。

對(duì)于第三種情況钻洒,可能光看文字還是有點(diǎn)抽象,還是用圖來示范吧桶错,例如下圖查找結(jié)點(diǎn)13的后繼結(jié)點(diǎn)15的過程:

下面給出了前驅(qū)節(jié)點(diǎn)查找的代碼實(shí)現(xiàn)航唆,后繼節(jié)點(diǎn)類似胀蛮,大家可以自己試著實(shí)現(xiàn)后繼節(jié)點(diǎn)查找代碼院刁。

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零粪狼,五九六 】退腥,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)再榄!裙內(nèi)有開發(fā)工具狡刘,很多干貨和技術(shù)資料分享!

為您提供通俗易懂的技術(shù)文章困鸥,讓技術(shù)變的更簡(jiǎn)單嗅蔬!

這些是C/C++能做的

服務(wù)器開發(fā)工程師、人工智能疾就、云計(jì)算工程師澜术、信息安全(黑客反黑客)、大數(shù)據(jù) 猬腰、數(shù)據(jù)平臺(tái)鸟废、嵌入式工程師、流媒體服務(wù)器姑荷、數(shù)據(jù)控解盒延、圖像處理、音頻視頻開發(fā)工程師鼠冕、游戲服務(wù)器添寺、分布式系統(tǒng)、游戲輔助等

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懈费,一起剝皮案震驚了整個(gè)濱河市计露,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖薄坏,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趋厉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胶坠,警方通過查閱死者的電腦和手機(jī)君账,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沈善,“玉大人乡数,你說我怎么就攤上這事∥拍担” “怎么了净赴?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)罩润。 經(jīng)常有香客問我玖翅,道長(zhǎng),這世上最難降的妖魔是什么割以? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任金度,我火速辦了婚禮,結(jié)果婚禮上严沥,老公的妹妹穿的比我還像新娘猜极。我一直安慰自己,他們只是感情好消玄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布跟伏。 她就那樣靜靜地躺著,像睡著了一般翩瓜。 火紅的嫁衣襯著肌膚如雪受扳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天奥溺,我揣著相機(jī)與錄音辞色,去河邊找鬼。 笑死浮定,一個(gè)胖子當(dāng)著我的面吹牛相满,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桦卒,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼立美,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了方灾?” 一聲冷哼從身側(cè)響起建蹄,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤碌更,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后洞慎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痛单,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年劲腿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旭绒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡焦人,死狀恐怖挥吵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情花椭,我是刑警寧澤忽匈,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站矿辽,受9級(jí)特大地震影響丹允,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗦锐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一嫌松、第九天 我趴在偏房一處隱蔽的房頂上張望沪曙。 院中可真熱鬧奕污,春花似錦、人聲如沸液走。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缘眶。三九已至嘱根,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巷懈,已是汗流浹背该抒。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顶燕,地道東北人凑保。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像涌攻,于是被迫代替她去往敵國(guó)和親欧引。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容