在學習時,李春葆數據結構一書給出定義,在...二叉樹中,WPL最小的二叉樹稱為哈夫曼樹。該點很容易導致我們認為哈夫曼樹只能是二叉樹。但在刷題過程中,天勤一書寫到哈夫曼樹不一定是二叉樹,有可能是多叉樹。
百度百科給出解釋:
哈夫曼樹也可以是k叉的,只是在構造k叉哈夫曼樹時需要先進行一些調整。構造哈夫曼樹的思想是每次選k個權重最小的元素來合成一個新的元素,該元素權重為k個元素權重之和。但是當k大於2時,按照這個步驟做下去可能到最后剩下的元素少於k個。解決這個問題的辦法是假設已經有了一棵哈夫曼樹(且為一棵滿k叉樹),則可以計算出其葉節點數目為(k-1)nk+1,式子中的nk表示子節點數目為k的節點數目。於是對給定的n個權值構造k叉哈夫曼樹時,可以先考慮增加一些權值為0的葉子節點,使得葉子節點總數為(k-1)nk+1這種形式,然后再按照哈夫曼樹的方法進行構造即可。
因此書上定義在做題時會造成思想上的誤差。
題目:若一顆度為m的哈夫曼樹有n個葉子結點,則非葉子結點個數為:
A. n-1
B. [n/m]-1
C. [n-1/m-1]
D. [n/m-1]-1
一般解決該類題型我們只需要舉簡單例子代入看是否符合條件即可,但如果是二叉樹的情況下,會發現A和C兩個選項是一致的,因為二叉樹度m=2恆定。
因此本題只能自行推導,設度為m的結點有nm個,度為0的結點有n個,總結點數為N,N=nm+n。又因為有N個結點的哈夫曼樹有N-1條分支,則m×nm=N-1=nm+n-1,整理只有C選項成立。
說明:哈夫曼樹不一定是二叉樹,有可能是多叉樹