森林與二叉樹的轉換

2021-06-28 14:44:27 字數 1583 閱讀 3324

對於一般樹,樹中孩子的次序並不重要,只要雙親與孩子的關係正確即可。但在二叉樹中,左、右孩子的次序是嚴格區分的。所以在討論二叉樹與一般樹之間的轉換時,為了不引起混淆,約定按樹上現有結點次序進行轉換。這裡研究二叉樹與一般樹之間的轉換,可以了解兩者之間的內在本質聯絡,同時在研究解決一般樹的問題時,有時可以將其轉換為二叉樹問題來解決。

樹或森林與二叉樹之間有乙個自然的一一對應關係。任何乙個森林或一棵樹可唯一地對應到一棵二叉樹。反之,任何一棵二叉樹也能唯一地對應到乙個森林或一棵樹。

(1)樹、森林到二叉樹的轉換

1)將樹轉換為二叉樹

樹中每個結點最多只有乙個最左邊的孩子(長子)和乙個右鄰的兄弟。按照這種關係很自然地就能將樹轉換成相應的二叉樹。

將一般樹轉化為二叉樹的思路,主要根據樹的孩子-兄弟儲存方式而來,步驟是:

①加線:在各兄弟結點之間用虛線相連。可理解為每個結點的兄弟指標指向它的乙個兄弟。

②抹線:對每個結點僅保留它與其最左乙個孩子的連線,抹去該結點與其他孩子之間的連線。可理解為每個結點僅有乙個孩子指標,讓它指向自己的長子。

③旋**把虛線改為實線從水平方向向下旋轉45℃,成右斜下方向。原樹中實線成左斜下方向。這樣就樹的形狀成呈現出一棵二叉樹。

下面圖3-54a所示的樹可轉換為圖3-54d所示的二叉樹。

2)將乙個森林轉換為二叉樹

森林是樹的有限集合,如圖3-55a所示。由上節可知,一棵樹可以轉換為二叉樹(沒有右子樹),乙個森林就可以轉換為二叉樹(沒有右子樹)的森林。將森林轉換為二叉樹的一般步驟為:

①將森林中每棵子樹轉換成相應的二叉樹。形成有若干二叉樹的森林,如圖3-55b所示。

②按森林圖形中樹的先後次序,依次將後邊一棵二叉樹作為前邊一棵二叉樹根結點的右子樹,這樣整個森林就生成了一棵二叉樹,實際上第一棵樹的根結點便是生成後的二叉樹的根結點。圖3-55是將乙個森林轉化為一棵二叉樹的示例。圖3-55d是轉化後的一棵二叉樹。

下圖中,圖a包含三棵樹的森林可轉換為圖d的二叉樹。

(2)二叉樹到樹、森林的轉換

1)二叉樹轉換為一般樹

此時的二叉樹必須是由某一樹(一般樹)轉換而來的沒有右子樹的二叉樹。並非隨便一棵二叉樹都能還原成一般樹。

其還原過程也分為三步:

①加線:若某結點i是雙親結點的左孩子,則將該結點i的右孩子以及當且僅當連續地沿著右孩子的右鏈不斷搜尋到所有右孩子,都分別與結點i的雙親結點用虛線連線。

②抹線:把原二叉樹中所有雙親結點與其右孩子的連線抹去。這裡的右孩子實質上是原一般樹中結點的兄弟,抹去的連線是兄弟間的關係。

③進行整理:把虛線改為實線,把結點按層次排列。

下圖把二叉樹還原為一般樹:

2)二叉樹轉換為森林

將一棵二叉樹轉化成森林,可按如下步驟進行:

①抹線:將二叉樹根結點與其右孩子之間的連線,以及沿著此右孩子的右鏈連續不繼搜尋到的右孩子間的連線抹掉。這樣就得到了若干棵根結點沒有右子樹的二叉樹。

②將得到的這些二叉樹用前述方法分別轉化成一般樹。

森林與二叉樹的轉換

什麼是森林?森林是多棵互不相交的樹組成的集合。森林要轉換成二叉樹,首先需要學會如何將樹轉換成二叉樹。樹轉換成二叉樹 1.加線 所有兄弟結點之間加一條線 2.去線 樹中每乙個結點,只保留與最左邊孩子結點的連線,去掉所有與其他結點的連線 3.旋 以根節點為軸心,將樹順時針旋轉一定角度,使其結構分明。森林...

樹 森林與二叉樹的轉換

1 加線。在所有兄弟節點之間加一條線。2 去線。對樹中每個節點,只保留它與第乙個孩子節點的連線,刪除它與其他孩子節點之間的連線。3 層次調整。以樹的根節點為軸心,將整顆樹順時針旋轉一定的角度,使之結構層次分明。注意第乙個孩子是二叉樹節點的左孩子,兄弟轉換過來的孩子是節點的右孩子。1 把每個樹轉換為二...

樹 森林與二叉樹的轉換

樹或森林與二叉樹之間有乙個自然的一一對應關係。任何乙個森林或一棵樹可惟一地對應到一棵二叉樹 反之,任何一棵二叉樹也能惟一地對應到乙個森林或一棵樹。1 樹 森林到二叉樹的轉換 1 將樹轉換為二叉樹 樹中每個結點最多只有乙個最左邊的孩子 長子 和乙個右鄰的兄弟。按照這種關係很自然地就能將樹轉換成相應的二...