假设我在树中及其子节点上具有以下节点映射:
(def a {0 [], 1 [], 2 [0, 1]})
对应于一棵树,其根节点为2,两个叶节点0和1为节点2的子节点。
我如何将其转换为父亲的地图,或者更好地将其与父亲一起装饰。例如。得出以下父亲名单:
{0 2, 1 2, 2 nil} ; each node only has one father at most
或者,更好的是,在下面的地图中结合了孩子和父亲:
{0 [[] 2], 1 [[] 2], 2 [[0,1] nil]}
最佳答案
(defn parents [m]
(let [plist (into {} (for [[k v] m vv v] [vv k]))]
(into {} (map (fn [[k v]] [k [v (plist k)]]) m))))
(parents a)
=> {0 [[] 2], 1 [[] 2], 2 [[0 1] nil]}