format bst
This commit is contained in:
parent
7391f2ffeb
commit
a0420c2879
1 changed files with 34 additions and 44 deletions
78
bst.rkt
78
bst.rkt
|
|
@ -2,55 +2,45 @@
|
||||||
|
|
||||||
(define-struct node (value left right))
|
(define-struct node (value left right))
|
||||||
|
|
||||||
(define (search node value) (cond
|
(define (search node value)
|
||||||
[(= (node-value node) value) node]
|
(cond
|
||||||
[(empty? node) empty]
|
[(= (node-value node) value) node]
|
||||||
[(> (node-value node) value) (search (node-left node) value)]
|
[(empty? node) empty]
|
||||||
[else (search (node-right node) value)]
|
[(> (node-value node) value) (search (node-left node) value)]
|
||||||
))
|
[else (search (node-right node) value)]))
|
||||||
|
|
||||||
(define (insert node value) (cond
|
(define (insert node value)
|
||||||
[(empty? node) (make-node value empty empty)]
|
(cond
|
||||||
[(> (node-value node) value) (make-node (node-value node) (insert (node-left node) value) (node-right node))]
|
[(empty? node) (make-node value empty empty)]
|
||||||
[else (make-node (node-value node) (node-left node) (insert (node-right node) value))]
|
[(> (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))]))
|
||||||
|
|
||||||
(define (bst-from-list lst) (cond
|
(define (bst-from-list lst)
|
||||||
[(empty? lst) empty]
|
(cond
|
||||||
[else (insert (bst-from-list (rest lst)) (first lst))]
|
[(empty? lst) empty]
|
||||||
))
|
[else (insert (bst-from-list (rest lst)) (first lst))]))
|
||||||
|
|
||||||
(define (rotate-left node) (if (empty? node) empty (let
|
(define (rotate-left node)
|
||||||
(
|
(if (empty? node) empty
|
||||||
[x node]
|
(let ([x node] [l (node-left node)] [r (node-right node)])
|
||||||
[l (node-left node)]
|
(let ([a (if (empty? l) empty (node-left l))]
|
||||||
[r (node-right node)])
|
[b (if (empty? l) empty (node-right l))]
|
||||||
(let (
|
[c (if (empty? r) empty (node-left r))]
|
||||||
[a (if (empty? l) empty (node-left l))]
|
[d (if (empty? r) empty (node-right r))])
|
||||||
[b (if (empty? l) empty (node-right l))]
|
(make-node (node-value l) a (make-node (node-value x) b 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)
|
|
||||||
)
|
|
||||||
)))))
|
|
||||||
|
|
||||||
(define (height node) (cond
|
(define (height node)
|
||||||
[(empty? node) 0]
|
(cond
|
||||||
[else (+ 1 (max (height (node-left node)) (height (node-right node))))]
|
[(empty? node) 0]
|
||||||
))
|
[else (+ 1 (max (height (node-left node)) (height (node-right node))))]))
|
||||||
|
|
||||||
(define (avlcheck node) (cond
|
(define (avlcheck node)
|
||||||
[(empty? node) 0]
|
(cond
|
||||||
[(= (height (node-left node)) -1) -1]
|
[(empty? node) 0]
|
||||||
[(= (height (node-right node)) -1) -1]
|
[(= (height (node-left node)) -1) -1]
|
||||||
[(< 1 (abs (- (height (node-left node)) (height (node-right node))))) -1]
|
[(= (height (node-right node)) -1) -1]
|
||||||
[else (+ 1 (max (height (node-left node)) (height (node-right node))))]
|
[(< 1 (abs (- (height (node-left node)) (height (node-right node))))) -1]
|
||||||
))
|
[else (+ 1 (max (height (node-left node)) (height (node-right node))))]))
|
||||||
|
|
||||||
(define (delete node)
|
(define (delete node)
|
||||||
(cond
|
(cond
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue