diff options
author | Determinant <ted.sybil@gmail.com> | 2017-05-30 01:28:36 -0400 |
---|---|---|
committer | Determinant <ted.sybil@gmail.com> | 2017-05-30 01:28:36 -0400 |
commit | 626a548f0ef51b5ee1d3ba049330317f94c89f99 (patch) | |
tree | 3ac0d4146e156a64ffe81fd2578ff6638f9fc7f5 /61-69/65.hs | |
parent | 8ea7effa639a0640b38917a9f575aedebcdd2b78 (diff) |
...
Diffstat (limited to '61-69/65.hs')
-rw-r--r-- | 61-69/65.hs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/61-69/65.hs b/61-69/65.hs new file mode 100644 index 0000000..179b972 --- /dev/null +++ b/61-69/65.hs @@ -0,0 +1,16 @@ +data Tree a = Empty | Branch a (Tree a) (Tree a) deriving (Show, Eq) + +layout :: Tree Char -> Tree (Char, (Int, Int)) + +layout t = draw t (1 + 2 ^ (dep - 1) - 2 ^ (dep - ldep)) 1 (2 ^ (dep - 2)) + where depth Empty = 0 + depth (Branch _ l r) = 1 + max (depth l) (depth r) + ldepth Empty = 0 + ldepth (Branch _ l _) = 1 + ldepth l + dep = depth t + ldep = ldepth t + draw Empty _ _ _ = Empty + draw (Branch v l r) x y h = Branch (v, (x, y)) lt rt + where h' = h `div` 2 + lt = draw l (x - h) (y + 1) h' + rt = draw r (x + h) (y + 1) h' |