小藍(lán)在學(xué)習(xí)二叉樹(shù)的遍歷時(shí),發(fā)現(xiàn)前序遍歷、中序遍歷和后序遍歷這三種遍歷方式都不能很好反映出節(jié)點(diǎn)間的父子關(guān)系,于是他自創(chuàng)了一種新的遍歷方式——“小藍(lán)遍歷”。其遍歷的順序如下:
(a)訪問(wèn)根節(jié)點(diǎn);(b)遍歷左子樹(shù)(若存在);(c)遍歷右子樹(shù)(若存在);(d)再次訪問(wèn)根節(jié)點(diǎn)。
可以發(fā)現(xiàn)在“小藍(lán)遍歷”中,二叉樹(shù)的每個(gè)節(jié)點(diǎn)都被訪問(wèn)了2次。例如,圖a中二叉樹(shù)的“小藍(lán)遍歷”為1-2-4-7-7-8-8-4-5-5-2-3-6-6-3-1。
請(qǐng)根據(jù)此背景,回答下列問(wèn)題:
(1)圖a中以節(jié)點(diǎn)2為根的子樹(shù)所對(duì)應(yīng)的“小藍(lán)遍歷”為 2-4-7-7-8-8-4-5-5-22-4-7-7-8-8-4-5-5-2。
(2)小藍(lán)發(fā)現(xiàn)“小藍(lán)遍歷”可以直觀反映出節(jié)點(diǎn)的父子關(guān)系:在遍歷過(guò)程中子節(jié)點(diǎn)第一次訪問(wèn)時(shí)間要晚于父節(jié)點(diǎn),而第二次訪問(wèn)時(shí)間要早于父節(jié)點(diǎn)。于是小藍(lán)利用這種遍歷方式輸入一棵二叉樹(shù),并編程求解任意兩個(gè)節(jié)點(diǎn)之間的路徑。如圖b所示,節(jié)點(diǎn)5到節(jié)點(diǎn)8的路徑為5-2-4-8。
具體求解的過(guò)程如下:
a.分別求從根節(jié)點(diǎn)到兩個(gè)節(jié)點(diǎn)的路徑序列。圖b中到5的路徑序列為[1,2,5],到8的路徑序列為[1,2,4,8]。
b.從前往后刪除兩個(gè)序列的相同部分,并記錄最后一個(gè)相同節(jié)點(diǎn)。上述例子中兩個(gè)序列的相同部分為[1,2],最后一個(gè)相同節(jié)點(diǎn)為2。
c.將剩余部分和最后一個(gè)相同節(jié)點(diǎn)按順序拼接起來(lái)。上述例子中[5]、[2]和[4,8]拼接得到[5,2,4,8]。
請(qǐng)根據(jù)算法描述在橫線處填入合適的代碼。
(3)加框處代碼有誤,請(qǐng)予以改正。
(4)若輸入的二叉樹(shù)節(jié)點(diǎn)總數(shù)為n,則單次執(zhí)行path( ?。┖瘮?shù)的時(shí)間復(fù)雜度為 BB(單選,填字母)。
A.0(1)
B.0(n)
C.0(n2)
D.0(2n)
【考點(diǎn)】程序設(shè)計(jì)實(shí)例.
【答案】2-4-7-7-8-8-4-5-5-2;B
【解答】
【點(diǎn)評(píng)】
聲明:本試題解析著作權(quán)屬菁優(yōu)網(wǎng)所有,未經(jīng)書(shū)面同意,不得復(fù)制發(fā)布。
發(fā)布:2024/6/27 10:35:59組卷:3引用:1難度:0.3
相似題
-
1.公因數(shù)只有1的兩個(gè)非零自然數(shù),叫做互質(zhì)自然數(shù)。王老師編寫(xiě)了一個(gè)Python程序,程序的功能是隨機(jī)產(chǎn)生5個(gè)1到20之間的整數(shù),找出其中和最大的互質(zhì)數(shù)對(duì)。程序運(yùn)行界面如圖所示:
實(shí)現(xiàn)該功能的程序代碼如下:
請(qǐng)回答下列問(wèn)題:
(1)尋找互質(zhì)數(shù)對(duì)的算法屬于
(2)如產(chǎn)生的 5 個(gè)隨機(jī)數(shù)是[20,16,12,6,14],則程序輸出內(nèi)容是
(3)要實(shí)現(xiàn)程序的功能,請(qǐng)完善橫線處的代碼。發(fā)布:2024/12/20 18:0:1組卷:3引用:1難度:0.4 -
2.小紅用Python編寫(xiě)程序畫(huà)出了如圖形,在第三行下劃線處應(yīng)該填寫(xiě)( ?。?br />
發(fā)布:2024/12/18 11:0:1組卷:2引用:1難度:0.6 -
3.【加試題】小丫覺(jué)得回文字符串太優(yōu)美了(回文字符串是指順讀和倒讀都一樣的字符串,如“123321”),為此編寫(xiě)了VB 程序。程序運(yùn)行時(shí),單擊按鈕Command1 后,根據(jù)文本框Text1 中輸入的內(nèi)容判斷并輸出是不是回文串。實(shí)現(xiàn)上述功能的VB 代碼如下。
Private Sub Command1_Click( )
Dim s As String,f As Boolean,L As Integer
s=Text1.Text
j=Len(s)
i=1
Do while?、?/bdo>
i=i+1
j=j-1
Loop
If ②Then Print“是回文串“Else Print“不是回文串“
End Sub
在畫(huà)線處填入合適代碼,使程序能正常運(yùn)行。
①
②發(fā)布:2024/12/19 14:30:2組卷:0引用:1難度:0.4
把好題分享給你的好友吧~~