为二叉树创建一个 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)