summaryrefslogtreecommitdiff
path: root/54a-60/58.hs
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2017-05-29 22:25:03 -0400
committerDeterminant <ted.sybil@gmail.com>2017-05-29 22:25:03 -0400
commit8ea7effa639a0640b38917a9f575aedebcdd2b78 (patch)
tree7916f64813dc89459ae62add344778fedafb3872 /54a-60/58.hs
parentd0aa856bedb0c0223b4ce2a67f5582b8eadf3682 (diff)
finish v6
Diffstat (limited to '54a-60/58.hs')
-rw-r--r--54a-60/58.hs23
1 files changed, 23 insertions, 0 deletions
diff --git a/54a-60/58.hs b/54a-60/58.hs
new file mode 100644
index 0000000..896889f
--- /dev/null
+++ b/54a-60/58.hs
@@ -0,0 +1,23 @@
+data Tree a = Empty | Branch a (Tree a) (Tree a) deriving (Show, Eq)
+
+cbalTree :: Int -> [Tree Char]
+
+cbalTree 0 = [Empty]
+cbalTree x
+ | even n = [Branch 'x' lt rt | let st = cbalTree ln, lt <- st, rt <- st]
+ | otherwise = let st1 = cbalTree ln
+ st2 = cbalTree (n - ln) in
+ [Branch 'x' lt rt | lt <- st1, rt <- st2] ++
+ [Branch 'x' lt rt | lt <- st2, rt <- st1]
+ where ln = n `div` 2
+ n = x - 1
+
+symCbalTrees :: Int -> [Tree Char]
+
+symCbalTrees x
+ | even n = [Branch 'x' st $ reverseTree st | st <- cbalTree ln]
+ | otherwise = []
+ where ln = n `div` 2
+ n = x - 1
+ reverseTree Empty = Empty
+ reverseTree (Branch x l r) = Branch x (reverseTree r) (reverseTree l)