数据结构——树、森林和二叉树之间的转换
摘自大佬博客http://www.cnblogs.com/zhuyf87/archive/2012/11/04/2753950.html
?
樹轉換為二叉樹
(1)加線。在所有兄弟結點之間加一條連線。
(2)去線。樹中的每個結點,只保留它與第一個孩子結點的連線,刪除它與其它孩子結點之間的連線。
(3)層次調整。以樹的根節點為軸心,將整棵樹順時針旋轉一定角度,使之結構層次分明。(注意第一個孩子是結點的左孩子,兄弟轉換過來的孩子是結點的右孩子)
口訣:兄弟相連,長兄為父,孩子靠左。
???????????????????????
森林轉換為二叉樹
(1)把每棵樹轉換為二叉樹。
(2)第一棵二叉樹不動,從第二棵二叉樹開始,依次把后一棵二叉樹的根結點作為前一棵二叉樹的根結點的右孩子,用線連接起來。
?
二叉樹轉換為樹
是樹轉換為二叉樹的逆過程。
(1)加線。若某結點X的左孩子結點存在,則將這個左孩子的右孩子結點、右孩子的右孩子結點、右孩子的右孩子的右孩子結點…,都作為結點X的孩子。將結點X與這些右孩子結點用線連接起來。
(2)去線。刪除原二叉樹中所有結點與其右孩子結點的連線。
(3)層次調整。
?
二叉樹轉換為森林
假如一棵二叉樹的根節點有右孩子,則這棵二叉樹能夠轉換為森林,否則將轉換為一棵樹。
(1)從根節點開始,若右孩子存在,則把與右孩子結點的連線刪除。再查看分離后的二叉樹,若其根節點的右孩子存在,則連線刪除…。直到所有這些根節點與右孩子的連線都刪除為止。
(2)將每棵分離后的二叉樹轉換為樹。
?
?
ps:個人看法二叉樹和樹還有森林之間之所以能夠轉換,我覺得上由于樹和二叉樹的特性決定的:樹中的結點有孩子、父親和兄弟這三種關系,而二叉樹有左孩子、右孩子和父親這三種關系,樹要轉換到二叉樹就是將兄弟掛到右子樹上,孩子掛到左子樹上,雖然父親、孩子和兄弟之間的關系沒有改變,但這樣孩子和兄弟已經分辨不出大小長幼了。
轉載于:https://www.cnblogs.com/wkfvawl/p/10066666.html
總結
以上是生活随笔為你收集整理的数据结构——树、森林和二叉树之间的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 加固前奏2-替换application
- 下一篇: Pipenv: Python包管理神器