正文之前
在實(shí)習(xí)的時(shí)候?qū)W習(xí)環(huán)境太差了,今天就結(jié)束生產(chǎn)實(shí)習(xí)啦!所以后面可以回去好好看書了!高興,特地來(lái)發(fā)篇排過(guò)版的文~~~
正文
什么是樹?
查找算法:
靜態(tài)查找 方法一:順序查找
方法二:二分查找--二叉樹的由來(lái)
樹的具體定義:
李逵?李鬼!非樹也~
基本術(shù)語(yǔ),下面是我的解讀:
節(jié)點(diǎn)的度:節(jié)點(diǎn)可以理解為人,這個(gè)人跟他老婆生孩子的度,怎么衡量呢?沒(méi)錯(cuò),就是兒子個(gè)數(shù),用在樹上也是可以這么說(shuō)的!
樹的度:看家族里面誰(shuí)的兒子最多就代表家族的度咯!
路徑,沒(méi)錯(cuò),路徑就是連線,至于多長(zhǎng),自己數(shù)~
評(píng)測(cè)一個(gè)家族的深度是看這個(gè)家族誰(shuí)的兒子最多嗎?不是!是看這個(gè)家族傳承多少代了~
二叉樹~
錯(cuò)題解讀:
順序查找:1只需要一次;
二分查找:
12/2 ----1
6/2 ----2
3/2----3
總共只需要四步!!!!不是五步!!!
其他3 需要五步, 6需要七步 2貌似二分查找找不到!
N0表示沒(méi)有兒子的節(jié)點(diǎn),n2表示有兩個(gè)兒子的節(jié)點(diǎn),對(duì)于深度為3的二叉樹,有n0 n1 n2三個(gè)節(jié)點(diǎn)分量,那么,我們可以考慮到,其節(jié)點(diǎn)總數(shù)可通過(guò)兩種方式獲取:
所有的節(jié)點(diǎn)數(shù)相加:n=n0+n1+n2
-
通過(guò)計(jì)算某一節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)相加來(lái)獲得總節(jié)點(diǎn)數(shù):
a) 其中n0表示葉節(jié)點(diǎn),所以沒(méi)有子節(jié)點(diǎn);
b) N1表示有一個(gè)子節(jié)點(diǎn),那么可以得到獨(dú)生子的個(gè)數(shù):n11;
c) N2表示有兩個(gè)子節(jié)點(diǎn),那么可以的到同父子節(jié)點(diǎn)的個(gè)數(shù):n22;
d) 根節(jié)點(diǎn)不屬于任何人的兒子,所以還要加個(gè)根節(jié)點(diǎn)數(shù):1;
所以通過(guò)這種方式獲得總結(jié)點(diǎn)數(shù):n=n00+n11+n2*2+1;
兩者聯(lián)立。沒(méi)法求解,但是可以的得出一個(gè)關(guān)系式:
前序遍歷結(jié)果:
中序遍歷:
后序遍歷的觀察方法很簡(jiǎn)單:先看一根主干,然后把葉子節(jié)點(diǎn)從左到右,一次撥開一層,然后輸出就好了。
訪問(wèn)路徑其實(shí)都是一樣的(每個(gè)節(jié)點(diǎn)都可以被碰到三次),但是輸出本節(jié)點(diǎn)的數(shù)據(jù)的時(shí)間不同,第一次遇到就輸出的是先序,第二次是中序,第三次是后序!!
第一次遇到是從父節(jié)點(diǎn)直接通過(guò)指針?biāo)阉鬟^(guò)來(lái)被指向,然后它本身有一個(gè)指向左指針,一個(gè)指向右指針,從左指針上的節(jié)點(diǎn)(不論其存在與都會(huì)進(jìn)行一次遞歸)回來(lái)訪問(wèn)它本身一次,從右指針上的節(jié)點(diǎn)(不論其存在與都會(huì)進(jìn)行一次遞歸)回來(lái)訪問(wèn)它本身一次。合共三次!
下面是我自己更加深刻的記憶方法:(兒子沖擊法)
查找路徑是一致的,一直往最左邊跑。如果跑到頭了。那么就是返回爸爸那里,從右邊開始繼續(xù)最左邊跑的道路不動(dòng)搖。如果爸爸只有一個(gè)自己這么一個(gè)獨(dú)生子,那么就跑到爺爺那里。
兒子沖擊法判定輸出順序:前序只要碰到了就直接輸出,中序的話,要被兒子沖擊一次,哪怕這個(gè)兒子并不存在你也要認(rèn)為存在(淫蕩點(diǎn)的你可以認(rèn)為是你的半個(gè)兒子~嘿嘿嘿,那啥恩。你懂得,但是你孫子就不存在吧!)。所以如圖所示,藍(lán)色箭頭代表兒子沖擊的次數(shù)。中序遍歷是兒砸沖擊一次。后序是兒砸沖擊兩次。
非遞歸就是迭代,執(zhí)行效率會(huì)大大提升!利用指針不斷地取下一個(gè)節(jié)點(diǎn),直到指針指向空NULL 那么久就可以跳出循環(huán),進(jìn)入下一個(gè)判斷條件進(jìn)行輸出~
層序遍歷比較好,用隊(duì)列,有始有終,先進(jìn)先出。具象化為:
一個(gè)人A去排隊(duì),然后順手把自己的兒子B C放在自己身后,然后兒子B又招呼自己的兒子 D E來(lái)排隊(duì),C也招呼自己的兒子F來(lái)排隊(duì),這樣,最后買到東西的次序就一直從爺爺排到了孫子。完全遵照年紀(jì)來(lái)排~~ 畫個(gè)圖吧 ~~
正文之后
為了排這篇文#正文之前
在實(shí)習(xí)的時(shí)候?qū)W習(xí)環(huán)境太差了,今天就結(jié)束生產(chǎn)實(shí)習(xí)啦!所以后面可以回去好好看書了!高興,特地來(lái)發(fā)篇排過(guò)版的文~~~