我需要使用四叉树,如下所示:
p /| |\ / | | \ / | | \ p w b p /| |\ /| |\ / | | \ / | | \ b w w b w b w b
但是它们已经以广度优先的顺序序列化为字符串,因此前面的树将具有以下表示形式:
ppwbpbwwbwbwb
我正在尝试将这样的字符串转换为嵌套向量结构:
[ [ b w w b ] w b [ w b w b] ]
但有时以下代码无法正确工作:
(defn read-quad-tree [pattern]
(loop [r []
[s & rs :as stack] []
[p & rp :as pending] (reverse pattern)]
(cond (nil? pending) (first r)
(= (count r) 4) (recur [] (conj stack (reverse r)) pending)
(= p \p) (recur (conj r s) rs rp)
:else (recur (conj r p) stack rp))))
编辑:增加一个复杂的示例:
另一个(失败的)示例。下一个树如下:
| +------+-------+------+ | | | | | w w | | | +---+---+---+ +---+---+---+ | | | | | | | | | w w | | w w | | | | | +-+-+-+ +-+-+-+ +-+-+-+ +-+-+-+ | | | | | | | | | | | | | | | | b b b b w w w w b b w w b w b w
将被序列化为:
ppwwppwwppwwpbbbbwwwwbbwwbwbw
目标是获取以下结构:
[ [ [ b b b b ] w w [ w w w w ] ] w w [ [ b b w w ] w w [ b w b w ] ] ]
但我的代码给出了不同的(错误的)结构。
b
或w
,而p
用于序列化以指示该节点具有子节点。 - gimco