二叉樹是數(shù)據(jù)結(jié)構(gòu)中的重點(diǎn)內(nèi)容,在這兩年的考試中也將二叉樹作為重點(diǎn)內(nèi)容來考查。二叉樹這部分內(nèi)容要求大家掌握二叉樹的定義、性質(zhì)、存儲(chǔ)結(jié)構(gòu)、遍歷、線索化、森林和二叉樹的轉(zhuǎn)換等內(nèi)容。算法的重點(diǎn)是二叉樹的遍歷及其應(yīng)用,這也是二叉樹這部分的重點(diǎn)和難點(diǎn)。遍歷是二叉樹各種操作的基礎(chǔ),可以在遍歷過程中對(duì)結(jié)點(diǎn)進(jìn)行各種操作。例如:求二叉樹結(jié)點(diǎn)總數(shù),建立二叉樹,建立二叉樹的存儲(chǔ)結(jié)構(gòu)等。二叉樹的很多算法是在遍歷算法基礎(chǔ)上改造完成的,這就要求大家在復(fù)習(xí)時(shí),熟練掌握二叉樹遍歷的遞歸和非遞歸算法。
下面,介紹一下二叉樹的幾種遍歷方法:
由二叉樹的定義可知,一顆二叉樹由根節(jié)點(diǎn)及左、右子樹三個(gè)基本部分組成,因此,只要依次遍歷這三部分,就可以遍歷整個(gè)二叉樹。
1.先序遍歷
先序遍歷的遞歸過程為:若二叉樹為空,遍歷結(jié)束。否則,
(1)訪問根節(jié)點(diǎn);
(2)先序遍歷根節(jié)點(diǎn)的左子樹;
(3)先序遍歷根節(jié)點(diǎn)的右子樹。
2.中序遍歷
中序遍歷的遞歸過程為:若二叉樹為空,遍歷結(jié)束。否則,
(1)中序遍歷根節(jié)點(diǎn)的左子樹;
(2)訪問根節(jié)點(diǎn);
(3)中序遍歷根節(jié)點(diǎn)的右子樹。
3.后序遍歷
后序遍歷的遞歸過程為:若二叉樹為空,遍歷結(jié)束。否則,
(1)后序遍歷根節(jié)點(diǎn)的左子樹;
(2)后序遍歷根節(jié)點(diǎn)的右子樹;
(3)訪問根節(jié)點(diǎn)。
層次遍歷
二叉樹的層次遍歷,是指從二叉樹的第一層(根結(jié)點(diǎn))開始,從上至下逐層遍歷,在同一層中,則按從左到右的順序?qū)Y(jié)點(diǎn)逐個(gè)訪問。在進(jìn)行層次遍歷時(shí),對(duì)一層結(jié)點(diǎn)訪問完后,再按照它們的訪問次序?qū)Ω鱾(gè)結(jié)點(diǎn)的左孩子和右孩子順序訪問,這樣一層一層進(jìn)行,先遇到的結(jié)點(diǎn)先訪問,這與隊(duì)列的操作原則比較吻合。因此,在進(jìn)行層次遍歷時(shí),可設(shè)置一個(gè)隊(duì)列結(jié)構(gòu),遍歷從二叉樹的根結(jié)點(diǎn)開始,首先將根結(jié)點(diǎn)指針入隊(duì)列,然后從對(duì)頭取出一個(gè)元素,每取一個(gè)元素,執(zhí)行下面兩個(gè)操作:
(1)訪問該元素所指結(jié)點(diǎn);
(2)若該元素所指結(jié)點(diǎn)的左、右孩子結(jié)點(diǎn)非空,則將該元素所指結(jié)點(diǎn)的左孩子指針和右孩子指針順序入隊(duì)。
此過程不斷進(jìn)行,當(dāng)隊(duì)列為空時(shí),二叉樹的層次遍歷結(jié)束。
這部分相關(guān)算法以及二叉樹遍歷的非遞歸算法在《計(jì)算機(jī)學(xué)科專業(yè)基礎(chǔ)綜合輔導(dǎo)講義》中有詳細(xì)講解,大家如果對(duì)這部分內(nèi)容還有疑問,可以查閱《計(jì)算機(jī)學(xué)科專業(yè)基礎(chǔ)綜合輔導(dǎo)講義》,一定要把這些基礎(chǔ)內(nèi)容搞清楚。
下面大家來看二叉樹遍歷這部分在考試中?碱}型:
1.由二叉樹的兩個(gè)遍歷序列的組合(先序序列和中序序列)、(中序序列和后序序列)、(層次序列和中序序列)構(gòu)造該二叉樹或求其他遍歷序列是一種常見的題型。需要注意的是已知二叉樹的先序序列和后序序列不能唯一確定該二叉樹。
2.以遍歷為基礎(chǔ)的二叉樹算法設(shè)計(jì)是考試的重點(diǎn)和難點(diǎn)。常見的試題有以下幾類:
(1)基于二叉樹遍歷的遞歸算法
這類題目的特點(diǎn)是直接根據(jù)三種遞歸算法改寫,修改訪問語句來實(shí)現(xiàn)。例如:求二叉樹的結(jié)點(diǎn)個(gè)數(shù)。
(2)基于二叉樹層次遍歷的算法
這類題目有求二叉樹的高度,求二叉樹最大寬度等。
(3)基于順序存儲(chǔ)的二叉樹遍歷算法
例如:求順序存儲(chǔ)的滿二叉樹中序遍歷的非遞歸算法。
(4)其他二叉樹遍歷算法
例如:左、右子樹交換等。
大家要重點(diǎn)掌握這些以遍歷為基礎(chǔ)的二叉樹算法題目,這就要求大家多做練習(xí),通過習(xí)題訓(xùn)練加深理解,掌握解題思路和技巧,提高解題能力。針對(duì)以上幾種算法題,大家可通過計(jì)算機(jī)學(xué)科專業(yè)基礎(chǔ)綜合輔導(dǎo)講義同步練習(xí)來準(zhǔn)備相應(yīng)的練習(xí)題并配有詳細(xì)的解答,掌握此部分內(nèi)容。
另外,現(xiàn)在大家開始沖刺復(fù)習(xí)了,選擇一本涵蓋全面、與真題題型一致、題目難度和真題難度高度相近,并對(duì)這兩年的考試試題進(jìn)行了詳細(xì)分析的全真模擬試題集,是此時(shí)沖刺的最佳幫手,可以幫助你查缺補(bǔ)漏,顯著提高應(yīng)試能力。