C語(yǔ)言是面向過(guò)程的,而C++是面向?qū)ο蟮?/p>
C和C++的區(qū)別:
C是一個(gè)結(jié)構(gòu)化語(yǔ)言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過(guò)一個(gè)過(guò)程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過(guò)程(事務(wù))控制)。
C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問(wèn)題域,這樣就可以通過(guò)獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過(guò)程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”。

C與C++的最大區(qū)別:在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語(yǔ)言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯(cuò)!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒(méi)有好的算法,一樣不行。而且,“C加上好的設(shè)計(jì)”也能寫(xiě)出非常好的東西。
小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!
1、先序遍歷(先訪問(wèn)根節(jié)點(diǎn))
先訪問(wèn)根節(jié)點(diǎn)
再先序遍歷左子樹(shù)
再先序遍歷右子樹(shù)
例:下圖:先訪問(wèn)根節(jié)點(diǎn)A,再先序訪問(wèn)A的左子樹(shù)B。A的左子樹(shù)B是一個(gè)樹(shù) ,所以先訪問(wèn)樹(shù)B的根節(jié)點(diǎn)B,再訪問(wèn)B的左子樹(shù)D。B的左子樹(shù)D是一個(gè)樹(shù),所以先訪問(wèn)D的根節(jié)點(diǎn)D,再訪問(wèn)D的左子樹(shù),D沒(méi)有左子樹(shù),再訪問(wèn)D的右子樹(shù),D沒(méi)有右子樹(shù),那么D訪問(wèn)完畢。再訪問(wèn)D的父親B的右子樹(shù)。B沒(méi)有右子樹(shù),那么B訪問(wèn)完畢。這樣A的左子樹(shù)訪問(wèn)完畢,序號(hào)為ABD。再訪問(wèn)A的右子樹(shù)C。先訪問(wèn)C的根節(jié)點(diǎn)C,再訪問(wèn)C的左子樹(shù)E,由于E沒(méi)有左子樹(shù)和右子樹(shù),所以E訪問(wèn)完畢。再訪問(wèn)C的右子樹(shù)F。F也是樹(shù),所以先訪問(wèn)F的根節(jié)點(diǎn)F,再訪問(wèn)F的左子樹(shù)G。G也是一個(gè)數(shù),所以先訪問(wèn)G的根節(jié)點(diǎn)G,而G沒(méi)有左右子樹(shù),G訪問(wèn)完畢。再訪問(wèn)G的父親F的右子樹(shù)。F沒(méi)有右子樹(shù),所以F訪問(wèn)完畢。因?yàn)镕是C的右子樹(shù),所以F訪問(wèn)完畢則C訪問(wèn)完畢。C訪問(wèn)完畢則整個(gè)樹(shù)訪問(wèn)完畢!
先序b遍歷
2、中序遍歷(中間訪問(wèn)根節(jié)點(diǎn))
中序遍歷左子樹(shù)
再訪問(wèn)根節(jié)點(diǎn)
再中序遍歷右節(jié)點(diǎn)
例:如下圖:
第一步中序遍歷A的左子樹(shù)B,由于左子樹(shù)B也是樹(shù),所以要先訪問(wèn)B的左子樹(shù)D。由于左子樹(shù)D也是樹(shù),所以要先訪問(wèn)D的左子樹(shù),D的左子樹(shù)為空,所以第1個(gè)訪問(wèn)的是左子樹(shù)的根節(jié)點(diǎn)D,再訪問(wèn)D的右子樹(shù),D的右子樹(shù)為空。所以D訪問(wèn)完畢。D訪問(wèn)完畢則B的左子樹(shù)訪問(wèn)完畢。第2個(gè)訪問(wèn)樹(shù)B的根節(jié)點(diǎn)B。再訪問(wèn)B的右子樹(shù)。因?yàn)锽的右子樹(shù)為空,所以B訪問(wèn)完畢。B訪問(wèn)完畢則A的左子樹(shù)訪問(wèn)完畢,所以第3個(gè)訪問(wèn)的是A。再訪問(wèn)A的右子樹(shù)C。因?yàn)镃也是樹(shù),所以先訪問(wèn)C的左子樹(shù)E。因?yàn)镋也是樹(shù),所以先訪問(wèn)E的左子樹(shù),E的左子樹(shù)為空,所以第4個(gè)訪問(wèn)的是E。再訪問(wèn)E的右子樹(shù),E的右子樹(shù)為空,所以C的左子樹(shù)訪問(wèn)完畢,接著訪問(wèn)C,所以第5個(gè)訪問(wèn)的是節(jié)點(diǎn)C。接著訪問(wèn)C的右子樹(shù)F。因?yàn)镕是樹(shù),所以先訪問(wèn)F的左子樹(shù)G。因?yàn)镚也是樹(shù),所以先訪問(wèn)G的左子樹(shù)。G的左子樹(shù)為空,所以第6個(gè)訪問(wèn)的是節(jié)點(diǎn)G。再訪問(wèn)G的右子樹(shù)。G的右子樹(shù)為空,所以節(jié)點(diǎn)G訪問(wèn)完畢。G訪問(wèn)完畢則F的左子樹(shù)訪問(wèn)完畢,所以第7個(gè)訪問(wèn)的是節(jié)點(diǎn)F。F的右子樹(shù)為空,所以F訪問(wèn)完畢,則C的右子樹(shù)訪問(wèn)完畢,所以A的右子樹(shù)訪問(wèn)完畢,整個(gè)樹(shù)訪問(wèn)完畢!
小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!
中序遍歷
3、后序遍歷(最后訪問(wèn)根節(jié)點(diǎn))
后序遍歷左子樹(shù)
后續(xù)遍歷右子樹(shù)
再訪問(wèn)根節(jié)點(diǎn)
后續(xù)遍歷
已知兩種遍歷序列求二叉樹(shù):只有已知一個(gè)樹(shù)的先序和中序或者是后序和中序,才可以還原出二叉樹(shù)的樣子。知道先序和后序是不可以還原出二叉樹(shù)。
例1、已知先序和中序還原出二叉樹(shù):
例1:已知先序:ABCDEFGH
中序:BDCEAFHG
求后序
解:先序中第一個(gè)出現(xiàn)的一定是根節(jié)點(diǎn),所以在先序中第一個(gè)出現(xiàn)的A是根節(jié)點(diǎn)。中序中找出該根節(jié)點(diǎn)左邊為左子樹(shù),右邊為右子樹(shù)。由于中序是先訪問(wèn)左子樹(shù)再訪問(wèn)根節(jié)點(diǎn)再訪問(wèn)右子樹(shù)。所以在中序中A的左邊是A的左子樹(shù),所以BDCE是A的左子樹(shù);
從先序中找到BDCE的順序是BCDE所以B是A左子樹(shù)的根節(jié)點(diǎn);
在中序中B的左邊一定是B的左子樹(shù)。由于B左邊沒(méi)有,所以B沒(méi)有左子樹(shù),DCE是B的右子樹(shù);
在先序中DCE三個(gè)個(gè)節(jié)點(diǎn)C是第一個(gè)出現(xiàn)的,所以C是B右子樹(shù)的根節(jié)點(diǎn);
再?gòu)闹行蛑蠨和E分別在C的左右,所以D是C的左子樹(shù),E是C的右子樹(shù),這樣A的左子樹(shù)確定那個(gè)。
再同樣確定A的右子樹(shù) 在中序中A的右邊FHG在先序中F第一個(gè)出現(xiàn),所以F是A的右子樹(shù)的根節(jié)點(diǎn);
再?gòu)闹行蛑蠪左邊沒(méi)有,所以F沒(méi)有左子樹(shù);HG是F的右子樹(shù);
再?gòu)南刃蛑写_定HG第一個(gè)出現(xiàn)的是G,所以G是F的右子樹(shù)的根;
再?gòu)闹行蛑蠫左邊是H,右邊沒(méi)有,所以H是G的左子是,G沒(méi)有右子樹(shù)。
這樣還原出樹(shù)和后序如下圖:
小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!
例2、已知后序和中序求先序:
已知中序:BDCEAFHG
后序:DECBHGFA
求先序。
解:后序中最后一個(gè)一定是根節(jié)點(diǎn),再在中序中找出做右子樹(shù)。
從后序中求出根節(jié)點(diǎn):A;
從中序中求出A的左子樹(shù):BDCE,右子樹(shù):FHG;
后序中求出A的左子樹(shù)BDCE的根結(jié)點(diǎn):B;
中序中求出B的左子樹(shù):空,右子樹(shù):DCE;
后序中求出樹(shù)DCE的根節(jié)點(diǎn):C;
中序中求出C的左子樹(shù):D,右子樹(shù):E;
后序中求出樹(shù)A的右子樹(shù)FHG根節(jié)點(diǎn):F;
中序中求出F的左子樹(shù):空,右子樹(shù):HG;
先序中求出樹(shù)HG的根節(jié)點(diǎn):G;
中序中求出節(jié)點(diǎn)G的左子樹(shù):H,右子樹(shù):空。
這樣還原出二叉樹(shù)和其先序如下圖:
~~~end~~~
這些是C/C++能做的
服務(wù)器開(kāi)發(fā)工程師、人工智能、云計(jì)算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺(tái)、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開(kāi)發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等


