- Java面試一戰(zhàn)到底(基礎(chǔ)卷)
- 周冠亞
- 717字
- 2021-03-26 21:59:39
2.8 樹和森林
2.8.1 普通樹轉(zhuǎn)化為二叉樹
普通樹可以轉(zhuǎn)化為二叉樹,轉(zhuǎn)化步驟如下:
(1)在普通樹的兄弟結(jié)點(diǎn)之間加一條線,使兄弟結(jié)點(diǎn)互連,如圖2-115所示。

圖2-115 兄弟結(jié)點(diǎn)間加一條線示意圖
(2)對于樹中的每個結(jié)點(diǎn),只保留其與第一孩子結(jié)點(diǎn)的連線,刪除結(jié)點(diǎn)與其他孩子結(jié)點(diǎn)之間的連線,如圖2-116所示。

圖2-116 每個結(jié)點(diǎn)只保留與第一個孩子結(jié)點(diǎn)的連線示意圖
(3)調(diào)整樹的層次結(jié)構(gòu)。以樹的根結(jié)點(diǎn)為軸心,將整棵樹旋轉(zhuǎn)一定的角度,使樹結(jié)構(gòu)層次分明,如圖2-117所示。

圖2-117 調(diào)整樹的層次結(jié)構(gòu)示意圖
2.8.2 森林轉(zhuǎn)化為二叉樹
森林由多棵樹組成。森林可以轉(zhuǎn)化為二叉樹,轉(zhuǎn)化步驟如下:
(1)將森林中的每棵樹轉(zhuǎn)化為二叉樹,如圖2-118所示。

圖2-118 森林中的每棵樹轉(zhuǎn)化為二叉樹示意圖
(2)保持第一棵不動,從第二棵二叉樹開始,依次把后一棵二叉樹的根結(jié)點(diǎn)作為前一棵二叉樹的根結(jié)點(diǎn)的右孩子,用線連接起來,如圖2-119所示。

圖2-119 依次把后一棵二叉樹的根結(jié)點(diǎn)作為前一棵二叉樹的根結(jié)點(diǎn)的右孩子示意圖
(3)調(diào)整樹的層次結(jié)構(gòu)。以樹的根結(jié)點(diǎn)為軸心,將整棵樹旋轉(zhuǎn)一定的角度,使樹結(jié)構(gòu)層次分明,如圖2-120所示。

圖2-120 調(diào)整樹的層次結(jié)構(gòu)示意圖
2.8.3 樹的遍歷
樹的遍歷分為以下兩種:
(1)先根遍歷。先訪問樹的根結(jié)點(diǎn),再依次先根遍歷根的每棵子樹。
(2)后根遍歷。先依次遍歷每棵子樹,再訪問根結(jié)點(diǎn)。
圖2-121所示的樹,先根遍歷的結(jié)果為ABEFCGDHIJ,后根遍歷的結(jié)果為EFBGCHIJDA。

圖2-121 普通樹示意圖
2.8.4 森林的遍歷
森林的遍歷也分為先跟遍歷和后根遍歷,其實(shí)就是按照樹的先根遍歷和后根遍歷依次訪問森林的每一棵樹。
在圖2-122所示的森林中,森林的先根遍歷結(jié)果為ABCDEFGHI,森林的后根遍歷結(jié)果為BCDAFEHIG。

圖2-122 森林示意圖
2.8.5 樹和森林常見面試考點(diǎn)
(1)普通樹與二叉樹間的轉(zhuǎn)換。
(2)森林與二叉樹間的轉(zhuǎn)換。
(3)樹的遍歷方式。
(4)森林的遍歷方式。
- Implementing VMware Horizon 7(Second Edition)
- Web程序設(shè)計及應(yīng)用
- .NET之美:.NET關(guān)鍵技術(shù)深入解析
- Arduino by Example
- Python自動化運(yùn)維快速入門(第2版)
- Mastering PHP Design Patterns
- Python 3破冰人工智能:從入門到實(shí)戰(zhàn)
- 西門子S7-200 SMART PLC編程從入門到實(shí)踐
- Scala Data Analysis Cookbook
- HTML5開發(fā)精要與實(shí)例詳解
- Android嵌入式系統(tǒng)程序開發(fā):基于Cortex-A8(第2版)
- Visual Studio Code 權(quán)威指南
- Java Hibernate Cookbook
- Instant GLEW
- Flask開發(fā)Web搜索引擎入門與實(shí)戰(zhàn)