WIP bst
This commit is contained in:
parent
9dca563e41
commit
fade1fc218
1 changed files with 18 additions and 7 deletions
25
bst.rkt
25
bst.rkt
|
|
@ -20,13 +20,12 @@
|
||||||
[(empty? lst) empty]
|
[(empty? lst) empty]
|
||||||
[else (insert (bst-from-list (rest lst)) (first lst))]))
|
[else (insert (bst-from-list (rest lst)) (first lst))]))
|
||||||
|
|
||||||
(define (rotate-left 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)])
|
||||||
(let ([a (if (empty? l) empty (node-left l))]
|
(let ([a (if (empty? l) empty (node-left l))]
|
||||||
[b (if (empty? l) empty (node-right l))]
|
[b (if (empty? l) empty (node-right l))]
|
||||||
[c (if (empty? r) empty (node-left r))]
|
[c (if (empty? r) empty (node-left r))])
|
||||||
[d (if (empty? r) empty (node-right r))])
|
|
||||||
(make-node (node-value l) a (make-node (node-value x) b r))))))
|
(make-node (node-value l) a (make-node (node-value x) b r))))))
|
||||||
|
|
||||||
(define (height node)
|
(define (height node)
|
||||||
|
|
@ -37,10 +36,22 @@
|
||||||
(define (avlcheck node)
|
(define (avlcheck node)
|
||||||
(cond
|
(cond
|
||||||
[(empty? node) 0]
|
[(empty? node) 0]
|
||||||
[(= (height (node-left node)) -1) -1]
|
[(= (avlcheck (node-left node)) -1) -1]
|
||||||
[(= (height (node-right node)) -1) -1]
|
[(= (avlcheck (node-right node)) -1) -1]
|
||||||
[(< 1 (abs (- (height (node-left node)) (height (node-right node))))) -1]
|
[(< 1 (abs (- (avlcheck (node-left node)) (avlcheck (node-right node))))) -1]
|
||||||
[else (+ 1 (max (height (node-left node)) (height (node-right node))))]))
|
[else (+ 1 (max (avlcheck (node-left node)) (avlcheck (node-right node))))]))
|
||||||
|
|
||||||
|
(define (min-subtree node)
|
||||||
|
(cond
|
||||||
|
[(empty? node) empty]
|
||||||
|
[(empty? (node-left node)) node]
|
||||||
|
[else (min-subtree (node-left node))]))
|
||||||
|
|
||||||
|
(define (max-subtree node)
|
||||||
|
(cond
|
||||||
|
[(empty? node) empty]
|
||||||
|
[(empty? (node-right node)) node]
|
||||||
|
[else (max-subtree (node-right node))]))
|
||||||
|
|
||||||
(define (delete node)
|
(define (delete node)
|
||||||
(cond
|
(cond
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue