data Seasons = Spring | Summer | Autumn | Winter
deriving (Show,Eq)
data Person = MakePerson String String Int|SofiaPerson String Int
deriving (Show)
getphone (MakePerson name addr phone) = phone
--data IntBinTree = Empty | Node Int IntBinTree IntBinTree
-- deriving (Show,Eq)
data Btree a = Empty |Node a (Btree a) (Btree a)
deriving (Show,Eq)
d=Node 5 (Node 6 (Empty) (Node 7 Empty Empty)) (Node 4 (Node 2 Empty Empty) (Empty))
tr=Node 50 (Node 30 (Node 10 (Empty) (Node 20 Empty Empty)) (Node 40 Empty Empty) ) (Empty)
sumTree Empty = 0
sumTree (Node n l r) = n + sumTree l + sumTree r
mListFTree Empty = []
mListFTree (Node n l r) = n:(mListFTree l ++ mListFTree r)
sumLeaf Empty = 0
sumLeaf (Node n Empty Empty) = n
sumLeaf (Node n l r) = sumLeaf l + sumLeaf r
height Empty = 0
height (Node n l r) = 1 + (max (height l) (height r))
--- Vsi4ki elementi na k-ti red v durvo
lvn k Empty = []
lvn 0 (Node n l r) = [n]
lvn k (Node n l r) = (lvn (k-1) l) ++ (lvn (k-1) r)
--namira minelement v dvoi4no naredeno darvo
minel (Node n Empty _) = n
minel (Node n l r) = minel l
-- dobavq element v dvoi4no naredeno darvo
addel p Empty = Node p Empty Empty
addel p (Node n l r)
|(p<=n) = Node n (addel p l) r
|otherwise = Node n l (addel p r)
--Iztirva element ot dvoi4no naredeno darvo
delel _ Empty = Empty
delel p (Node n l r)
|(p<n) = Node n (delel p l) r
|(p>n) = Node n l (delel p r)
|otherwise = delroot p (Node n l r)
delroot p (Node n Empty Empty) = Empty
delroot p (Node n Empty l) = l
delroot p (Node n r Empty) = r
delroot p (Node n l r) = Node (minel r) l (delel (minel r) r)
tupp = Node (5,100) (Node (10,70) (Node (20,40) Empty Empty) (Node (6,71) Empty Empty)) (Node (1,200) Empty Empty)
--Nai golemiq interval koito sudurja x
elm x Empty = False
elm x (Node (a,b) l r)
| (x>a)&&(x<b) = True
| otherwise = elm x r
--Nai malkiq interval koito sudurja x (ne raboti vse o6te)
--fukciq koqto dava korena na durvo
getRoot Empty = (0,0)
getRoot (Node n _ _) = n
minInt Empty _ = (0,0)
minInt (Node (a,b) Empty r) x
|(x>a)&&(x<b) = (a,b)
|otherwise = minInt r x
minInt (Node (a,b) l r) x
|((x>a)&&(x<b))&&((x>first (getRoot l))&&(x<second (getRoot l)))= minInt l x
|((x>a)&&(x<b))= (a,b)
|otherwise = minInt r x
data BTree a = Empty | Node a (BTree a) (BTree a)
deriving (Show)
n=Node 50 (Node 30 (Node 10 Empty (Node 20 Empty Empty)) (Node 40 Empty Empty)) Empty
-- min element na durvo
minTree (Node v Empty _ )=v
minTree (Node _ l _ )=minTree l
--dobavq element
insertBot Empty x=Node x Empty Empty
insertBot (Node v l r) x
|v<=x= Node v l(insertBot r x)
--iztriva element |otherwise=Node v (insertBot l x) r
delBot Empty x=Empty
delBot (Node v l r) x
|v<x=Node v l (delBot r x)
|v>x=Node v (delBot l x) r
|otherwise=deleteRoot(Node v l r)
deleteRoot (Node v Empty Empty)=Empty
deleteRoot (Node v l Empty)=l
deleteRoot (Node v Empty r)=r
deleteRoot (Node v l r)=Node (minTree r) l (delBot r (minTree r))
t=Node (5,100) (Node (10,70) (Node (20,60) Empty Empty) (Node (6,71) Empty Empty)) (Node (1,200) Empty Empty)