Actually readable Level Order Traversal
This commit is contained in:
parent
ec0a6b7b16
commit
aac10d031d
@ -17,18 +17,47 @@
|
||||
-- 4 5 6
|
||||
--
|
||||
|
||||
isLeaf = (\node : lOr (emptyList node) (emptyList (tail node)))
|
||||
getLabel = (\node : head node)
|
||||
getLeft = (\node : if (emptyList node) [] (if (emptyList (tail node)) [] (head (tail node))))
|
||||
getRight = (\node : if (emptyList node) [] (if (emptyList (tail node)) [] (if (emptyList (tail (tail node))) [] (head (tail (tail node))))))
|
||||
isLeaf = (\node :
|
||||
lOr
|
||||
(emptyList node)
|
||||
(emptyList (tail node)))
|
||||
|
||||
getLabel = (\node : head node)
|
||||
|
||||
getLeft = (\node : if (emptyList node)
|
||||
[]
|
||||
(if (emptyList (tail node))
|
||||
[]
|
||||
(head (tail node))))
|
||||
|
||||
getRight = (\node : if (emptyList node)
|
||||
[]
|
||||
(if (emptyList (tail node))
|
||||
[]
|
||||
(if (emptyList (tail (tail node)))
|
||||
[]
|
||||
(head (tail (tail node))))))
|
||||
|
||||
processLevel = y (\self queue : if (emptyList queue)
|
||||
[]
|
||||
(pair (map getLabel queue) (self (filter
|
||||
(\node : not (emptyList node))
|
||||
(lconcat (map getLeft queue) (map getRight queue))))))
|
||||
|
||||
processLevel = y (\self queue : if (emptyList queue) [] (pair (map getLabel queue) (self (filter (\node : not (emptyList node)) (lconcat (map getLeft queue) (map getRight queue))))))
|
||||
levelOrderTraversal = (\a : processLevel (t a t))
|
||||
toLineString = y (\self levels : if (emptyList levels) "" (lconcat (lconcat (map (\x : lconcat x " ") (head levels)) "") (if (emptyList (tail levels)) "" (lconcat (t (t 10 t) t) (self (tail levels))))))
|
||||
|
||||
toLineString = y (\self levels : if (emptyList levels)
|
||||
""
|
||||
(lconcat
|
||||
(lconcat (map (\x : lconcat x " ") (head levels)) "")
|
||||
(if (emptyList (tail levels)) "" (lconcat (t (t 10 t) t) (self (tail levels))))))
|
||||
|
||||
levelOrderToString = (\s : toLineString (levelOrderTraversal s))
|
||||
|
||||
flatten = foldl (\acc x : lconcat acc x) ""
|
||||
flatLOT = (\s : lconcat (t 10 t) (flatten (levelOrderToString s)))
|
||||
|
||||
exampleOne = flatLOT [("1") [("2") [("4") t t] t] [("3") [("5") t t] [("6") t t]]]]
|
||||
exampleOne = flatLOT [("1") [("2") [("4") t t] t] [("3") [("5") t t] [("6") t t]]]
|
||||
exampleTwo = flatLOT [("1") [("2") [("4") [("8") t t] [("9") t t]] [("6") [("10") t t] [("12") t t]]] [("3") [("5") [("11") t t] t] [("7") t t]]]
|
||||
|
||||
exampleOne
|
||||
|
Loading…
x
Reference in New Issue
Block a user