{- |
Description: Binary trees
Copyright: Copyright (C) 2021 Yoo Chung
License: GPL-3.0-or-later
Maintainer: dev@chungyc.org

Part of Ninety-Nine Haskell "Problems".  Some solutions are in "Solutions.P54".
-}
module Problems.P54 (Tree, leaf, tree1, tree2, tree3, tree4) where

import           Problems.BinaryTrees
import qualified Solutions.P54        as Solution

-- | Define a shorthand function for constructing a leaf node.
--
-- A leaf node in 'Tree' is a branch with two empty subtrees.
leaf :: a -> Tree a
leaf :: forall a. a -> Tree a
leaf = a -> Tree a
forall a. a -> Tree a
Solution.leaf

-- | Define as the tree as shown in the following.
--
-- !['b' and 'c' are children of 'a', 'd' and 'e' are children of 'b', 'f' is the right child of 'c', 'g' is the left child of 'f'](images/BinaryTrees/tree1.svg)
tree1 :: Tree Char
tree1 :: Tree Char
tree1 = Tree Char
Solution.tree1

-- | Define as a binary tree consisting of only a single root node with value @\'a\'@.
tree2 :: Tree Char
tree2 :: Tree Char
tree2 = Tree Char
Solution.tree2

-- | Define as an empty binary tree.
tree3 :: Tree Char
tree3 :: Tree Char
tree3 = Tree Char
Solution.tree3

-- | Define as the following tree with integer values.
--
-- ![two nodes with both values of 2 are children of 1, 4 is the right child of the left 2](images/BinaryTrees/tree4.svg)
tree4 :: Tree Int
tree4 :: Tree Int
tree4 = Tree Int
Solution.tree4