樹院崇,森林與二叉樹的轉(zhuǎn)換:
- 樹轉(zhuǎn)換為二叉樹:
1肆氓;加線:在所有兄弟結(jié)點(diǎn)之間加一條連線
2;去線:對(duì)樹中每個(gè)結(jié)點(diǎn)亚脆,只保留它與第一個(gè)孩子結(jié)點(diǎn)的連線做院,刪除它與其他孩子結(jié)點(diǎn)之間的連線。
3濒持;層次調(diào)整键耕;以樹的根結(jié)點(diǎn)為軸心,將整棵樹順時(shí)針旋轉(zhuǎn)一定的角度柑营,使之結(jié)構(gòu)層次分明屈雄。(第一個(gè)孩子是二叉樹結(jié)點(diǎn)的左孩子,兄弟轉(zhuǎn)換過來的是前一兄弟結(jié)點(diǎn)的右孩子)
- 二叉樹轉(zhuǎn)換為樹:
1官套;加線:若某結(jié)點(diǎn)的左孩子結(jié)點(diǎn)存在酒奶,則將這個(gè)左孩子的n個(gè)右孩子結(jié)點(diǎn)都作為此結(jié)點(diǎn)的孩子。將該結(jié)點(diǎn)與這些右孩子結(jié)點(diǎn)用線連接起來奶赔。
2惋嚎;去線:刪除原二叉樹中所有結(jié)點(diǎn)與其右孩子結(jié)點(diǎn)的連線。
3站刑;層次調(diào)整:使之結(jié)構(gòu)層次分明另伍。
- 森林轉(zhuǎn)換為二叉樹:
(森林由若干棵樹組成,每棵都是兄弟绞旅“诔ⅲ可按照兄弟的處理辦法來操作)
1;把每棵樹轉(zhuǎn)換為二叉樹因悲。
2堕汞;第一棵二叉樹不動(dòng),從第二棵二叉樹開始晃琳,依次把后一棵二叉樹的根結(jié)點(diǎn)作為前一棵二叉樹的根結(jié)點(diǎn)的右孩子讯检,用線連接起來。當(dāng)所有的二叉樹連接起來后就得到了有森林轉(zhuǎn)換來的二叉樹蝎土。
- 二叉樹轉(zhuǎn)換為森林:
(判斷一顆二叉樹能夠轉(zhuǎn)換成一棵樹還是森林视哑,只看這棵二叉樹的根結(jié)點(diǎn)有沒有右孩子,有就是森林誊涯,沒有就是一棵樹)
1;從根結(jié)點(diǎn)開始蒜撮,若右孩子存在暴构,則把與右孩子結(jié)點(diǎn)的連線刪除跪呈,再查看分離后的二叉樹,若右孩子存在取逾,則連線刪除耗绿,直到所有右孩子連線都刪除為止,得到分離的二叉樹砾隅。
2误阻;再將每棵分離后的二叉樹轉(zhuǎn)換為樹即可。
樹與森林的遍歷:
- 樹的遍歷分為兩種方式:
1晴埂;先根遍歷究反,即先訪問樹的根結(jié)點(diǎn),然后依次先根遍歷根的每棵子樹儒洛。
2精耐;后根遍歷,即先依次后根遍歷每棵子樹琅锻,然后再訪問根結(jié)點(diǎn)卦停。
- 森林遍歷的兩種方式:
1;前序遍歷:先訪問森林中第一棵樹的根結(jié)點(diǎn)恼蓬,然后再依次先根遍歷根的每棵子樹惊完,再依次用同樣方式遍歷除去第一棵樹的剩余樹構(gòu)成的森林。
2处硬;后序遍歷:先訪問森林中第一棵樹小槐,后根遍歷的方式遍歷每棵子樹,然后再訪問根結(jié)點(diǎn)郁油,再依次同樣的方式遍歷除去第一棵樹的剩余樹構(gòu)成的森林本股。
結(jié)點(diǎn)的帶權(quán)的路徑長(zhǎng)度為從該結(jié)點(diǎn)到樹根之間的路徑長(zhǎng)度與結(jié)點(diǎn)上權(quán)的乘積。
樹的帶權(quán)路徑長(zhǎng)度為樹中所有葉子結(jié)點(diǎn)的帶權(quán)路徑長(zhǎng)度之和桐腌。