1.棧的基本概念
棧是限定只在一端進(jìn)行插入與刪除的線性表,通常稱(chēng)插入、刪除的這一端為棧頂,另一端為棧底。當(dāng)表中沒(méi)有元素時(shí)稱(chēng)為空棧。棧頂元素總是后被插入的元素,從而也是最先被刪除的元素;棧底元素總是最先被插入的元素,從而也是最后才能被刪除的元素。棧是按照先進(jìn)后出或后進(jìn)先出的原則組織數(shù)據(jù)的。
2.棧的順序存儲(chǔ)及其運(yùn)算
用一維數(shù)組S(1∶m)作為棧的順序存儲(chǔ)空間,其中m為最大容量。
在棧的順序存儲(chǔ)空間S(1∶m)中,S(bottom)為棧底元素,S(top)為棧頂元素。top=0表示?;top=m表示棧滿。
棧的基本運(yùn)算有三種:入棧、退棧與讀棧頂元素。
(1)入棧運(yùn)算:入棧運(yùn)算是指在棧頂位置插入一個(gè)新元素。首先將棧頂指針加一(即top加1),然后將新元素插入到棧頂指針指向的位置。當(dāng)棧頂指針已經(jīng)指向存儲(chǔ)空間的最后一個(gè)位置時(shí),說(shuō)明?臻g已滿,不可能再進(jìn)行入棧操作。這種情況稱(chēng)為棧上溢錯(cuò)誤。
(2)退棧運(yùn)算:退棧是指取出棧頂元素并賦給一個(gè)指定的變量。首先將棧頂元素(棧頂指針指向的元素)賦給一個(gè)指定的變量,然后將棧頂指針減一(即top減1)。當(dāng)棧頂指針為0時(shí),說(shuō)明?,不可進(jìn)行退棧操作。這種情況稱(chēng)為棧的下溢錯(cuò)誤。
(3)讀棧頂元素:讀棧頂元素是指將棧頂元素賦給一個(gè)指定的變量。這個(gè)運(yùn)算不刪除棧頂元素,只是將它賦給一個(gè)變量,因此棧頂指針不會(huì)改變。當(dāng)棧頂指針為0時(shí),說(shuō)明棧空,讀不到棧頂元素。
小技巧:棧是按照先進(jìn)后出或后進(jìn)先出的原則組織數(shù)據(jù),但是出棧方式有多種選擇,在考題中經(jīng)常考查各種不同的出棧方式。
樹(shù)及二叉樹(shù)的性質(zhì)
誤區(qū)警示:
滿二叉樹(shù)也是完全二叉樹(shù),而完全二叉樹(shù)一般不是滿二叉樹(shù)。應(yīng)該注意二者的區(qū)別。
1、樹(shù)的基本概念
樹(shù)(tree)是一種簡(jiǎn)單的非線性結(jié)構(gòu)。在樹(shù)結(jié)構(gòu)中,每一個(gè)結(jié)點(diǎn)只有一個(gè)前件,稱(chēng)為父結(jié)點(diǎn),沒(méi)有前件的結(jié)點(diǎn)只有一個(gè),稱(chēng)為樹(shù)的根結(jié)點(diǎn)。每一個(gè)結(jié)點(diǎn)可以有多個(gè)后件,它們稱(chēng)為該結(jié)點(diǎn)的子結(jié)點(diǎn)。沒(méi)有后件的結(jié)點(diǎn)稱(chēng)為葉子結(jié)點(diǎn)。
在樹(shù)結(jié)構(gòu)中,一個(gè)結(jié)點(diǎn)所擁有的后件個(gè)數(shù)稱(chēng)為該結(jié)點(diǎn)的度。葉子結(jié)點(diǎn)的度為0。在樹(shù)中,所有結(jié)點(diǎn)中的最大的度稱(chēng)為樹(shù)的度。
2、二叉樹(shù)及其基本性質(zhì)
(1)二叉樹(shù)的定義
二叉樹(shù)是一種很有用的非線性結(jié)構(gòu),具有以下兩個(gè)特點(diǎn):
①非空二叉樹(shù)只有一個(gè)根結(jié)點(diǎn);
、诿恳粋(gè)結(jié)點(diǎn)最多有兩棵子樹(shù),且分別稱(chēng)為該結(jié)點(diǎn)的左子樹(shù)和右子樹(shù)。
由以上特點(diǎn)可以看出,在二叉樹(shù)中,每一個(gè)結(jié)點(diǎn)的度最大為2,即所有子樹(shù)(左子樹(shù)或右子樹(shù))也均為二叉樹(shù),而樹(shù)結(jié)構(gòu)中的每一個(gè)結(jié)點(diǎn)的度可以是任意的。另外,二叉樹(shù)中的每個(gè)結(jié)點(diǎn)的子樹(shù)被明顯地分為左子樹(shù)和右子樹(shù)。在二叉樹(shù)中,一個(gè)結(jié)點(diǎn)可以只有左子樹(shù)而沒(méi)有右子樹(shù),也可以只有右子樹(shù)而沒(méi)有左子樹(shù)。當(dāng)一個(gè)結(jié)點(diǎn)既沒(méi)有左子樹(shù)也沒(méi)有右子樹(shù)時(shí),該結(jié)點(diǎn)即為葉子結(jié)點(diǎn)。
(2)二叉樹(shù)的基本性質(zhì)
二叉樹(shù)具有以下幾個(gè)性質(zhì):
性質(zhì)1:在二叉樹(shù)的第k層上,最多有2k-1(k≥1)個(gè)結(jié)點(diǎn);
性質(zhì)2:深度為m的二叉樹(shù)最多有2m-1個(gè)結(jié)點(diǎn);
性質(zhì)3:在任意一棵二叉樹(shù)中,度為0的結(jié)點(diǎn)(即葉子結(jié)點(diǎn))總是比度為2的結(jié)點(diǎn)多一個(gè)。
二叉樹(shù)的遍歷
在遍歷二叉樹(shù)的過(guò)程中,一般先遍歷左子樹(shù),再遍歷右子樹(shù)。在先左后右的原則下,根據(jù)訪問(wèn)根結(jié)點(diǎn)的次序,二叉樹(shù)的遍歷分為三類(lèi):前序遍歷、中序遍歷和后序遍歷。
(1)前序遍歷:先訪問(wèn)根結(jié)點(diǎn)、然后遍歷左子樹(shù),最后遍歷右子樹(shù);并且,在遍歷左、右子樹(shù)時(shí),仍然先訪問(wèn)根結(jié)點(diǎn),然后遍歷左子樹(shù),最后遍歷右子樹(shù)。
(2)中序遍歷:先遍歷左子樹(shù)、然后訪問(wèn)根結(jié)點(diǎn),最后遍歷右子樹(shù);并且,在遍歷左、右子樹(shù)時(shí),仍然先遍歷左子樹(shù),然后訪問(wèn)根結(jié)點(diǎn),最后遍歷右子樹(shù)。
(3)后序遍歷:先遍歷左子樹(shù)、然后遍歷右子樹(shù),最后訪問(wèn)根結(jié)點(diǎn);并且,在遍歷左、右子樹(shù)時(shí),仍然先遍歷左子樹(shù),然后遍歷右子樹(shù),最后訪問(wèn)根結(jié)點(diǎn)。
疑難解答:樹(shù)與二叉樹(shù)的不同之處是什么?
在二叉樹(shù)中,每一個(gè)結(jié)點(diǎn)的度最大為2,即所有子樹(shù)(左子樹(shù)或右子樹(shù))也均為二叉樹(shù),而樹(shù)結(jié)構(gòu)中的每一個(gè)結(jié)點(diǎn)的度可以是任意的。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |