diff --git a/bst.rkt b/bst.rkt index 1190df8..9256ee6 100644 --- a/bst.rkt +++ b/bst.rkt @@ -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))])) \ No newline at end of file + [else (make-node (node-value (replacement node)) (sans-max-subtree (node-left node)) (node-right node))])) \ No newline at end of file