資料結構與演算法

將二元堆積以根為 a[0] 的陣列 a[0], a[1], a[2], … 存放,從上層開始每層由左往右依序填入。a[4] 的子節點與父節點為下列何者?

  1. A子節點為 a[9] 與 a[10],父節點為 a[1]
  2. B子節點為 a[8] 與 a[9],父節點為 a[2]
  3. C子節點為 a[9] 與 a[10],父節點為 a[2]
查看答案與解析

正確答案:A. 子節點為 a[9] 與 a[10],父節點為 a[1]

以 a[0] 為根時,a[i] 的子節點為 a[2i+1] 與 a[2i+2],父節點為 a[(i−1) ÷ 2 無條件捨去]。i = 4 時,子節點為 a[9] 與 a[10],父節點為 a[(4−1) ÷ 2] = a[1]。以 a[1] 為根時,子節點為 a[2i] 與 a[2i+1],父節點為 a[i ÷ 2],因此確認採用哪一種規則很重要。由於堆積是完全二元樹,可以不用指標而以陣列表示,只靠索引計算就能找到父子節點。

  • A. 正確。子節點為 2×4+1 = 9 與 2×4+2 = 10,父節點為 (4−1)÷2 = 1。
  • B. 這是套用以 a[1] 為根的公式(子節點 2i 與 2i+1,父節點 i÷2)的結果。
  • C. 子節點正確,但父節點是 (4−1)÷2 無條件捨去,即 a[1]。
練習這個領域 前往領域頁面

相關計算工具

資料結構與演算法的其他題目

  1. 以根為 a[0] 的陣列表示父節點值大於或等於子節點值的最大堆積。對堆積 50, 30, 40, 10, 20, 35 加入45:先放在末尾,只要比父節點大就與父節點交換。操作後的陣列為下列何者?
  2. 以中序走訪(依左子樹、該節點、右子樹的順序拜訪)走訪二元搜尋樹時,拜訪到的節點值會如何排列?假設所有值都不相同。
  3. 對空的二元搜尋樹依序插入 50, 30, 70, 20, 40, 60, 80。以後序走訪(依左子樹、右子樹、該節點的順序拜訪)走訪此樹時,順序為下列何者?
  4. 對空的二元搜尋樹依序插入 1, 2, 3, …, 1000(不做平衡的操作)。在這棵樹中尋找1000時,從根部開始比較,到找到為止要比較幾個節點?
  5. 資料庫與檔案系統的索引常使用 B 樹(包含 B+ 樹)而非二元搜尋樹,其主要原因為下列何者?