Stumped with functional breadth-first tree traversal in Clojure?

前端 未结 4 1180
借酒劲吻你
借酒劲吻你 2021-02-02 12:24

Say I have a tree defined as per the recommendation in this post, although it\'s a vector in my case, which hopefully shouldn\'t matter (they\'re vectors in Programming Clojure

4条回答
  •  南旧
    南旧 (楼主)
    2021-02-02 12:44

    This might help, I was creating an algorithm to evaluate if a tree is symmetric and used a breadth-first traversal:

    (defn node-values [nodes]
        (map first nodes))
    
    (defn node-children [nodes]
      (mapcat next nodes))
    
    (defn depth-traversal [nodes]
        (if (not (empty? nodes))
            (cons (node-values nodes) (depth-traversal (node-children nodes)))))
    
    (defn tree-symmetric? [tree]
        (every?
            (fn [depth] (= depth (reverse depth)))
            (depth-traversal (list tree))))
    
    (def tree '(1 (2 (3) (4)) (2 (4) (3))))
    (node-values (list tree)) ; (1)
    (node-children (list tree)) ; ((2 (3) (4)) (2 (4) (3)))
    (depth-traversal (list tree)) ; ((1) (2 2) (3 4 4 3))
    (tree-symmetric? tree) ; true
    

提交回复
热议问题