WIP bst & more tests
This commit is contained in:
parent
a8fd5241ce
commit
fbdc710918
1 changed files with 23 additions and 1 deletions
24
bst.rkt
24
bst.rkt
|
|
@ -35,6 +35,11 @@
|
||||||
[(empty? lst) empty]
|
[(empty? lst) empty]
|
||||||
[else (insert (bst-from-list (rest lst)) (first lst))]))
|
[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)
|
(define (rotate-right node)
|
||||||
(if (empty? node) empty
|
(if (empty? node) empty
|
||||||
(let ([x node] [l (node-left node)] [r (node-right node)])
|
(let ([x node] [l (node-left node)] [r (node-right node)])
|
||||||
|
|
@ -48,6 +53,23 @@
|
||||||
[(empty? node) 0]
|
[(empty? node) 0]
|
||||||
[else (+ 1 (max (height (node-left node)) (height (node-right node))))]))
|
[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)
|
(define (avlcheck node)
|
||||||
(cond
|
(cond
|
||||||
[(empty? node) 0]
|
[(empty? node) 0]
|
||||||
|
|
@ -86,4 +108,4 @@
|
||||||
[(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))]))
|
[else (make-node (node-value (replacement node)) (sans-max-subtree (node-left node)) (node-right node))]))
|
||||||
Loading…
Add table
Add a link
Reference in a new issue