> For the complete documentation index, see [llms.txt](https://garychang.gitbook.io/data-structure/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://garychang.gitbook.io/data-structure/lecture2-tree-and-binary-tree/lecture-2.8-advanced-trees/2.8.4-extended-binary-tree.md).

# 2.8.4 - Extended Binary Tree

### 1. 介紹

具有n個節點的二元樹，若以Link List表示，則會有n+1條`NULL`Iinks，在這些links加上特殊節點**External Nodes**，其餘節點稱為**Internal Nodes**。

圖示:

![](https://2769815795-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGckN3OAfinKuVIrkMj%2F-LHpYZbvH4R_2Q_1lEMg%2F-LHpZR_WZ9obo-Ute5J_%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-19%2020.13.22.jpg?alt=media\&token=bbd671c3-ff32-4dfb-8656-ebf8fe26bc4b)

$$Internal\ Path\ Length=\sum\_{i=1}^{n}L(Root \ to\ Internal\ Node\_{i})$$&#x20;

$$External\ Path\ Length=\sum\_{j=0}^{n}L(Root \ to\ External\ Node\_{j})$$&#x20;

### 2. Theorem

### $$E=I+2N$$&#x20;

使用數學歸納法證明:

假設左子樹內部節點數$$n\_{L}$$、內部路徑長 $$I\_{L}$$ 、外部路徑長 $$E\_{L}$$；右子樹內部節點數$$n\_{R}$$、內部路徑長 $$I\_{R}$$ 、外部路徑長 $$E\_{R}$$。

1. 當內部節點數$$N=0$$ ，此樹為空樹$$E=I=0$$ ，所以 $$E=I+2N$$ 成立。
2. 假設內部節點數為 $$N-1$$ 時，此定理成立。
   1. 左子樹滿足 $$E\_{L}=I\_{L}+2n\_{L}$$&#x20;
   2. 右子樹滿足 $$E\_{R}=I\_{R}+2n\_{R}$$&#x20;
3. 當內部節點數為 $$N$$時，

整棵樹的 $$I$$、 $$E$$ 分別為:

$$I = I\_{L}+I\_{R}+n\_{L}+n\_{R}\E=E\_{L}+E\_{R}+(n\_{L}+1)+(n\_{R}+1)$$&#x20;

代入2.假設:&#x20;

$$E=E\_{L}+E\_{R}+(n\_{L}+1)+(n\_{R}+1)\\=(I\_{L}+2n\_{L})+(I\_{R}+2n\_{R})+(n\_{L}+1)+(n\_{R}+1)\\=(I\_{L}+I\_{R}+n\_{L}+n\_{R})+2(n\_{L}+n\_{R}+1)\ =I+2N$$&#x20;

### 3. Weighted External Path Length

$$W\.E.P.L=\sum\_{i=0}^{n}E\_{i}\*q\_{i}$$     ( $$q\_{i}$$ 為外部節點加權值)

使用Huffman演算法求出最小Weighted External Path Length

1. 自加權值集合中取出兩個最小的權值
2. 此兩權值和他們的和建立延伸二元樹
3. 將兩個加權值的和重新加入到集合中
4. 重複1\~3直到集合中只剩一個值

圖示範例:   $$W={2,\ 3,\ 5,\ 7,\ 9,\ 13}$$&#x20;

![1](https://2769815795-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGckN3OAfinKuVIrkMj%2F-LHpczhD8U_dJXUEcV5F%2F-LHpeFR5kEnu0EJmE11A%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-19%2021.29.48.jpg?alt=media\&token=19eebbfd-473b-4dc7-abd9-42bf09c6e96d)

![2](https://2769815795-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGckN3OAfinKuVIrkMj%2F-LHpczhD8U_dJXUEcV5F%2F-LHpeIMdPcqjq6QlpW91%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-19%2021.32.13.jpg?alt=media\&token=e29172fe-f25d-4c32-a546-c847a5b651eb)

![3](https://2769815795-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGckN3OAfinKuVIrkMj%2F-LHpczhD8U_dJXUEcV5F%2F-LHpeKfDsyqK_jhg0nN4%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-19%2021.34.06.jpg?alt=media\&token=10a51ddb-1d3f-4b46-9e01-400c0d372c61)

![4](https://2769815795-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGckN3OAfinKuVIrkMj%2F-LHpczhD8U_dJXUEcV5F%2F-LHpeMvib6h2vhtQJYTs%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-19%2021.38.21.jpg?alt=media\&token=913759e6-cf7e-4012-9685-46ae969e12a3)

![5](https://2769815795-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGckN3OAfinKuVIrkMj%2F-LHpczhD8U_dJXUEcV5F%2F-LHpeonStHyCIU4l_Pqu%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-20%2011.10.49.jpg?alt=media\&token=f5c0d11b-4a17-4b33-8e64-9f8b0418fdc7)

$$min\ WEPL=2*7+2*9+2*13+3*5+4*2+4*3=93$$&#x20;

### 4. 應用

有6種不同的messages(m1\~m6)，其出現頻率分別為 $$m\_{1}=\frac{2}{39},\ m\_{2}=\frac{3}{39},\ m\_{3}=\frac{5}{39},\ m\_{4}=\frac{7}{39},\ m\_{5}=\frac{9}{39},\ m\_{6}=\frac{13}{39}$$ ，若希望平均解碼時間最小，則該如何編碼？

* **Encoding/Decoding Tree**

![](https://2769815795-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGckN3OAfinKuVIrkMj%2F-LHqC3mRqVuN269Nqm08%2F-LHqCZK9_WTgg9hYtKEa%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-20%2010.25.54.jpg?alt=media\&token=7e60b342-bed0-42ff-9aa4-4165d43f82e7)

* **每個message的編碼內容**

1. m1=1010
2. m2=1011
3. m3=100
4. m4=00
5. m5=01
6. m6=11

* **平均解碼時間＝** $$\sum\_{i=1}^{n}(解一個m\_{i}的時間)\*(m\_{i}出現頻率)$$&#x20;
* **平均編碼位元長度＝** $$\sum\_{i=1}^{n}(m\_{i}位元長度)\*(m\_{i}出現頻率)$$&#x20;

Optimal Prefix Code: 當對方收到訊息後，其解碼是唯一
