diff options
author | Determinant <ted.sybil@gmail.com> | 2017-05-29 22:25:03 -0400 |
---|---|---|
committer | Determinant <ted.sybil@gmail.com> | 2017-05-29 22:25:03 -0400 |
commit | 8ea7effa639a0640b38917a9f575aedebcdd2b78 (patch) | |
tree | 7916f64813dc89459ae62add344778fedafb3872 /54a-60/58.hs | |
parent | d0aa856bedb0c0223b4ce2a67f5582b8eadf3682 (diff) |
finish v6
Diffstat (limited to '54a-60/58.hs')
-rw-r--r-- | 54a-60/58.hs | 23 |
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) |