拉鍊

拉鍊

中等

說明

為二元樹建立一個 zipper。

Zippers 是一種純函式的方式,用來在資料結構中移動並操作它。它基本上包含一個資料結構,以及一個指向該資料結構的指標(稱為焦點)。

舉例來說,給定一棵玫瑰樹(每個節點包含一個值和一個子節點陣列),zipper 可能支援這些操作:

  • from_tree(從玫瑰樹取得一個 zipper,焦點在根節點上)
  • to_tree(從 zipper 取出玫瑰樹)
  • value(取得焦點節點的值)
  • prev(將焦點移到同一父節點的前一個子節點,回傳一個新的 zipper)
  • next(將焦點移到同一父節點的後一個子節點,回傳一個新的 zipper)
  • up(將焦點移到父節點,回傳一個新的 zipper)
  • set_value(設定焦點節點的值,回傳一個新的 zipper)
  • insert_before(在焦點節點之前插入一個新的子樹,它會成為焦點節點的 prev,回傳一個新的 zipper)
  • insert_after(在焦點節點之後插入一個新的子樹,它會成為焦點節點的 next,回傳一個新的 zipper)
  • delete(移除焦點節點及其所有子樹,焦點會移到 next 節點(如果可行的話),否則移到 prev 節點(如果可行的話),再不然就移到父節點,回傳一個新的 zipper)

範圍

你會發現 Tree 類別已經替你實作好了。 你的任務是撰寫 Zipper 類別。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Tcl Exercism

準備好開始 拉鍊 了嗎?

註冊 Exercism,透過 135 個練習 和真人引導來學習並精通 Tcl,全部免費。