iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0

大家會不會也常常有那種被時間追著跑的感覺呢(´A`。)最近的我時常有這種感覺,越是這種時候好像越想逃避,但不可以!我們一起加油吧,不管怎麼樣還是要持續努力持續進步的對吧
今天繼續來講二元樹!!昨天講了它的種類、定理,今天來看他要怎麼表示!

二元樹之表示方式

[法一]利用Array表示

做法:
若B.T.高度=k,則準備一個一維陣列A:array[1..2ᵏ-1]將B.T.個個Node仿照Full B.T.的Node編號,將Node's Data填入A之對應格中。

計算節點位置:

  • index 0 的位置不使用
  • index 1 的位置為root
    計算i node的左節點:2 × i
    計算i node的右節點:2 × i + 1

例:
(圖)

Note:
若是Full/Complete B.T.有n個Data⇒A[1..n]即可

優點

  1. 易於存取左、右子點及父點
  2. 對於Full/Complete B.T.之儲存,無空間之浪費、充分利用

缺點

  1. Node之插入、刪除不便(可能需要重新宣告及元素挪動)
  2. 對於skewed B.T.的儲存,極為浪費空間(因為浪費(2ᵏ-1)-k格)
    (圖)

[法二]利用Linked list表示

做法:
Node structure
Lchild | Data | Rchild
------------- | -------------
Lchild、Rchild:指標指向左右子點
例:
(圖)

優點

  1. Node之插入、刪除方便
  2. 對於skewed B.T.儲存較Array省空間

缺點

  1. 不易存取父點
  2. links之空間浪費約50%
    **說明:**n個Nodes之B.T.,共有2n條links,其中只有(n-1)條非空,所以有(n+1)條是Null

上一篇
Day 13. Binary tree-二元樹
下一篇
Day 15. Binary Tree Traversal-二元樹走訪
系列文
演算法資料結構,五四三二一起GO!15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言