數據結構習題:設F是一個森林,B是由F變換得的二叉樹。若F中有n個非終端結點,則B中右指針域爲空的結點有多少個

設F是一個森林,B是由F變換得的二叉樹。若F中有n個非終端結點,則B中右指針域爲空的結點有多少個
森林轉二叉樹:

將森林中每棵樹轉換成相應的二叉樹;
第一棵二叉樹不動,從第二棵二叉樹開始,依次把後一棵二叉樹的根結點作爲前一棵二叉樹根結點的右孩子,當所有二叉樹連起來後,此時,所得二叉樹即是森林轉換得到的。

在這裏插入圖片描述

第一步:每棵樹轉二叉樹
在這裏插入圖片描述
第二步:二叉樹合併

在這裏插入圖片描述

二叉樹轉森林

若某結點是其雙親的左孩子則把該結點的右孩子,右孩子的右孩子…都與該結點的雙親結點用線連起來;
刪除原二叉樹中所有的雙親結點與右孩子結點間的連線; 整理上兩步所得的樹/森林,使之結構層次分明。 本題思路:(非終端節點即非葉子結點)
右指針域爲空個數 = 總的空指針域個數 - 左指針域爲空的個數

題目非終端結點爲n,那麼假設設森林總結點爲m,終端結點(即葉子結點)爲 m-n,總指針域就是2*m。

根據二叉樹的特性,可知,在m個結點的二叉鏈表中,有 m+1 個空指針域。

除根節點外,每個結點直接都被其父結點指向,使用的指針域爲m-1,所以空指針域爲 2*m -(m-1) = m+1

終端結點轉化爲二叉樹後,該結點沒有左孩子,左指針域就爲空,即m-n。

因爲森林轉二叉樹後,左孩子是第一個孩子,右孩子是兄弟,所以終端結點轉化後一定無左孩子,右孩子可能有也可能沒有,也就是說轉化後有兩種可能,一是仍爲葉子結點,二爲不再是葉子結點,但只有右孩子。

所以右指針域爲空的個數爲:m + 1 -(m - n) = n + 1。

答案即爲 n + 1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章