1. 什么是森林
森林,顧名思義,就是由眾多的樹構(gòu)成的一組數(shù)據(jù)結(jié)構(gòu),這些樹本身沒有什么聯(lián)系,用系統(tǒng)的語言描述就是:森林:m(>=0)棵互不相交的樹的集合 【注意這里森林是可以有0顆樹的,同數(shù)學(xué)上的空集】
如果把一棵樹當(dāng)作一個獨(dú)立的點,那么森林就是一個點的集合。
2. 樹轉(zhuǎn)換成二叉樹
操作過程如下:
加線:在兄弟(即同一層之間的孩子)之間加一連線
抹線:對每個結(jié)點,除了其第一個孩子外,除去其與其余孩子之間的連線
旋轉(zhuǎn):以樹的根結(jié)點為軸心,將整樹順時針轉(zhuǎn)45°
如圖:
注意:樹轉(zhuǎn)換成二叉樹其右子樹一定為空
3. 二叉樹轉(zhuǎn)換成樹
加線:若p結(jié)點是雙親結(jié)點的左孩子,則將p的右孩子,右孩子的右孩子,……沿分支找到的所有右孩子,都與p的雙親用線連起來
抹線:抹掉原二叉樹中雙親與右孩子之間的連線
調(diào)整:將結(jié)點按層次排列,形成樹結(jié)構(gòu)
如圖:
4. 森林轉(zhuǎn)換成二叉樹
將各棵樹分別轉(zhuǎn)換成二叉樹
將每棵樹的根結(jié)點用線相連
以第一棵樹根結(jié)點為二叉樹的根,再以根結(jié)點為軸心,順時針旋轉(zhuǎn),構(gòu)成二叉樹型結(jié)構(gòu)
如圖:
5. 二叉樹轉(zhuǎn)換成森林
抹線:將二叉樹中根結(jié)點與其右孩子連線,及沿右分支搜索到的所有右孩子間連線全部抹掉,使之變成孤立的二叉樹
還原:將孤立的二叉樹還原成樹(二叉樹→樹)
如圖:
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程