WIP bst & more tests

This commit is contained in:
joachimschmidt557 2019-09-13 19:37:50 +02:00
parent a8fd5241ce
commit fbdc710918

24
bst.rkt
View file

@ -35,6 +35,11 @@
[(empty? lst) empty]
[else (insert (bst-from-list (rest lst)) (first lst))]))
(check-true (contains (bst-from-list (list 3)) 3))
(check-true (contains (bst-from-list (list 3 4 2 8)) 2))
(check-false (contains (bst-from-list (list 3)) 4))
(check-false (contains (bst-from-list (list 3 7 2 1 5 6)) 4))
(define (rotate-right node)
(if (empty? node) empty
(let ([x node] [l (node-left node)] [r (node-right node)])
@ -48,6 +53,23 @@
[(empty? node) 0]
[else (+ 1 (max (height (node-left node)) (height (node-right node))))]))
(define (preorder node)
(cond
[(empty? node) empty]
[else (cons (node-value node) (append (preorder (node-left node)) (preorder (node-right node))))]))
(define (postorder node)
(cond
[(empty? node) empty]
[else (append (postorder (node-left node)) (postorder (node-right node)) (list (node-value node)))]))
(define (inorder node)
(cond
[(empty? node) empty]
[else (append (inorder (node-left node)) (cons (node-value node) (inorder (node-right node))))]))
(check-equal? (inorder (bst-from-list (list 5 2 4 3 7))) (list 2 3 4 5 7))
(define (avlcheck node)
(cond
[(empty? node) 0]
@ -86,4 +108,4 @@
[(empty? node) empty]
[(empty? (node-left node)) (node-right node)]
[(empty? (node-right node)) (node-left node)]
[else (make-node (node-value (replacement node)) (node-left node) (node-right node))]))
[else (make-node (node-value (replacement node)) (sans-max-subtree (node-left node)) (node-right node))]))