為二元樹建立一個 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 類別。