C語言的數(shù)據(jù)結(jié)構(gòu)之樹、森連、二叉樹之間的轉(zhuǎn)換圖解
樹 到 二叉樹
例子:
1.給兄弟加線
2.給出長子外的孩子去線
3.層次調(diào)整 (整體向左偏移45°)
eg:
1.給兄弟加線:
2.給處長紫外的孩子去線
3.層次調(diào)整,整體向左偏移45° (由兄弟轉(zhuǎn)化來的孩子都是右節(jié)點(diǎn),第一個(gè)節(jié)點(diǎn)都是左節(jié)點(diǎn))
j為i的兄弟節(jié)點(diǎn),轉(zhuǎn)換后為i的右孩子,h是c的第個(gè)節(jié)點(diǎn),轉(zhuǎn)換后為左孩子。
將森林轉(zhuǎn)化成二叉樹
1.將森林中的每棵樹轉(zhuǎn)化成二叉樹(與上面將樹轉(zhuǎn)換成二叉樹的方法一樣)
2.將所有的二叉樹轉(zhuǎn)換成一棵二叉樹(將第二棵樹的根節(jié)點(diǎn)當(dāng)作第一棵樹的右孩子,將第三棵樹的根節(jié)點(diǎn)當(dāng)作第二棵樹的右孩子……依次類推)
3.將這些二叉樹連成總的二叉樹:
二叉樹轉(zhuǎn)換成樹:
1.加線:如果一個(gè)節(jié)點(diǎn)的左孩子存在,就將節(jié)點(diǎn)與左孩子節(jié)點(diǎn)的右孩子節(jié)點(diǎn),右孩子節(jié)點(diǎn)的右孩子節(jié)點(diǎn)相連(依次)
2.去線:去掉與右孩子之間的連線
3.進(jìn)行層次調(diào)整(整體都往右偏移45°)
二叉樹轉(zhuǎn)換成森林
一棵二叉樹轉(zhuǎn)換成森林看這顆二叉樹是否右右子樹,如果有則能轉(zhuǎn)換成森麗,否則只能轉(zhuǎn)換成樹
1.尋找右孩子去線(每次都觀察去掉后的樹是否有右孩子,有則去掉)
2.將分離的二叉樹轉(zhuǎn)換成樹
再將它們轉(zhuǎn)換成樹 (根節(jié)點(diǎn)有左孩子就與左孩子的右節(jié)點(diǎn),右節(jié)點(diǎn)的右節(jié)點(diǎn)……相連,再斷開左節(jié)點(diǎn)與之相連的右節(jié)點(diǎn)后向右偏移45°)
到此這篇關(guān)于C語言的數(shù)據(jù)結(jié)構(gòu)之樹、森連、二叉樹之間的轉(zhuǎn)換詳解的文章就介紹到這了,更多相關(guān)C語言的數(shù)據(jù)結(jié)構(gòu)樹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)基于控制臺(tái)界面的吃豆子游戲
這篇文章主要介紹了C++實(shí)現(xiàn)基于控制臺(tái)界面的吃豆子游戲,實(shí)例分析了吃豆子游戲的原理與C++實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04