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)、游戲輔助等