Mercurial > hg > Members > soto > experimental
view bt.agda @ 0:696cb69c25f0
add bt-insert
author | soto |
---|---|
date | Thu, 12 Nov 2020 21:35:03 +0900 |
parents | |
children | 1b087eaf1c4b |
line wrap: on
line source
module bt where open import Data.Nat hiding (compare) open import Data.Nat.Properties as NatProp -- <-cmp open import Relation.Binary record tree (A B C : Set) : Set where field key : A ltree : B rtree : C data bst : Set where bt-empty : bst bt-node : (node : tree ℕ bst bst ) → bst -- insert bt-insert : ℕ → bst → bst bt-insert n bt-empty = (bt-node (record { key = n ; ltree = bt-empty ; rtree = bt-empty }) ) bt-insert n (bt-node (record { key = x ; ltree = l ; rtree = r }) ) with <-cmp n x bt-insert n (bt-node (record { key = x ; ltree = l ; rtree = r }) ) | tri≈ ¬a b ¬c = (bt-node (record { key = x ; ltree = l ; rtree = r }) ) bt-insert n (bt-node (record { key = x ; ltree = l ; rtree = r }) ) | tri< a ¬b ¬c = (bt-node (record { key = x ; ltree = l ; rtree = (bt-insert n r) }) ) -- nの方が小さい bt-insert n (bt-node (record { key = x ; ltree = l ; rtree = r }) ) | tri> ¬a ¬b c = (bt-node (record { key = x ; ltree = (bt-insert n l) ; rtree = r }) ) -- nの方が大きい -- 以下test部分 test-insert1 : bst test-insert1 = bt-insert 2 bt-empty test-insert2 : bst test-insert2 = bt-insert 3 test-insert1 test-insert3 : bst test-insert3 = bt-insert 1 test-insert2 test-insert4 : bst test-insert4 = bt-insert 4 test-insert3