WIP bst & add tests
This commit is contained in:
parent
fade1fc218
commit
a8fd5241ce
1 changed files with 31 additions and 2 deletions
33
bst.rkt
33
bst.rkt
|
|
@ -1,20 +1,35 @@
|
||||||
#lang racket
|
#lang racket
|
||||||
|
|
||||||
|
(require rackunit)
|
||||||
|
|
||||||
(define-struct node (value left right))
|
(define-struct node (value left right))
|
||||||
|
|
||||||
(define (search node value)
|
(define (search node value)
|
||||||
(cond
|
(cond
|
||||||
[(= (node-value node) value) node]
|
|
||||||
[(empty? node) empty]
|
[(empty? node) empty]
|
||||||
|
[(= (node-value node) value) node]
|
||||||
[(> (node-value node) value) (search (node-left node) value)]
|
[(> (node-value node) value) (search (node-left node) value)]
|
||||||
[else (search (node-right node) value)]))
|
[else (search (node-right node) value)]))
|
||||||
|
|
||||||
|
(define (contains node value)
|
||||||
|
(cond
|
||||||
|
[(empty? node) #f]
|
||||||
|
[(= (node-value node) value) #t]
|
||||||
|
[(> (node-value node) value) (contains (node-left node) value)]
|
||||||
|
[else (contains (node-right node) value)]))
|
||||||
|
|
||||||
|
(check-true (contains (make-node 3 empty empty) 3))
|
||||||
|
(check-false (contains (make-node 3 empty empty) 4))
|
||||||
|
|
||||||
(define (insert node value)
|
(define (insert node value)
|
||||||
(cond
|
(cond
|
||||||
[(empty? node) (make-node value empty empty)]
|
[(empty? node) (make-node value empty empty)]
|
||||||
[(> (node-value node) value) (make-node (node-value node) (insert (node-left node) value) (node-right node))]
|
[(> (node-value node) value) (make-node (node-value node) (insert (node-left node) value) (node-right node))]
|
||||||
[else (make-node (node-value node) (node-left node) (insert (node-right node) value))]))
|
[else (make-node (node-value node) (node-left node) (insert (node-right node) value))]))
|
||||||
|
|
||||||
|
(check-true (contains (insert empty 3) 3))
|
||||||
|
(check-false (contains (insert empty 3) 4))
|
||||||
|
|
||||||
(define (bst-from-list lst)
|
(define (bst-from-list lst)
|
||||||
(cond
|
(cond
|
||||||
[(empty? lst) empty]
|
[(empty? lst) empty]
|
||||||
|
|
@ -53,8 +68,22 @@
|
||||||
[(empty? (node-right node)) node]
|
[(empty? (node-right node)) node]
|
||||||
[else (max-subtree (node-right node))]))
|
[else (max-subtree (node-right node))]))
|
||||||
|
|
||||||
|
(define (replacement node)
|
||||||
|
(cond
|
||||||
|
[(empty? node) empty]
|
||||||
|
[(empty? (node-left node)) empty]
|
||||||
|
[else (max-subtree (node-left node))]))
|
||||||
|
|
||||||
|
(define (sans-max-subtree node)
|
||||||
|
(cond
|
||||||
|
[(empty? node) empty]
|
||||||
|
[(empty? (node-right node)) empty]
|
||||||
|
[(empty? (node-right (node-right node))) (make-node (node-value node) (node-left node) empty)]
|
||||||
|
[else (make-node (node-value node) (node-left node) (sans-max-subtree (node-right node)))]))
|
||||||
|
|
||||||
(define (delete node)
|
(define (delete node)
|
||||||
(cond
|
(cond
|
||||||
[(empty? node) empty]
|
[(empty? node) empty]
|
||||||
[(empty? (node-left node)) (node-right node)]
|
[(empty? (node-left node)) (node-right node)]
|
||||||
[(empty? (node-right node)) (node-left node)]))
|
[(empty? (node-right node)) (node-left node)]
|
||||||
|
[else (make-node (node-value (replacement node)) (node-left node) (node-right node))]))
|
||||||
Loading…
Add table
Add a link
Reference in a new issue