Advertisement
Guest User

Untitled

a guest
Sep 26th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 2.11 KB | None | 0 0
  1. (define-struct node (left right))
  2.  
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  4.  
  5.  
  6. (define (tree-grow-min tree)
  7.   (cond
  8.     [(empty? tree) (make-node empty empty)]
  9.     [(= 1 (getNumNodes tree)) (make-node (make-node empty empty) empty)]
  10.     [(= 2 (getNumNodes tree)) (make-node (make-node empty empty) (make-node empty empty))]
  11.     [(isFull (getNumNodes tree) 1) (makeFullTree (getFullHeight (+ (getNumNodes tree) 1) 0) (make-node empty empty))]
  12.     [(> (getHeight (node-left tree)) (getHeight (node-right tree)))
  13.       (make-node (tree-grow-min (node-right tree)) (node-left tree))]
  14.     [true (make-node (tree-grow-min (node-left tree)) (node-right tree))]))
  15.  
  16.  
  17. (define (tree-shrink-min tree)
  18.   (cond
  19.     [(empty? tree) empty]
  20.     [(= 1 (getNumNodes tree)) empty]
  21.     [(= 2 (getNumNodes tree)) (make-node empty empty)]
  22.     [(isFull (getNumNodes tree) 1) (makeFullTree (getFullHeight (- (getNumNodes tree) 1) 0) (make-node empty empty))]
  23.     [(< (getHeight (node-left tree)) (getHeight (node-right tree)))
  24.       (make-node (tree-shrink-min (node-right tree)) (node-left tree))]
  25.     [true (make-node (tree-shrink-min (node-left tree)) (node-right tree))]))
  26.  
  27. ; gets height (basic) of tree)
  28. (define (getHeight tree)
  29.   (cond
  30.     [(empty? tree) 0]
  31.     [else (+ 1 (max (getHeight (node-left tree)) (getHeight (node-right tree))))]))
  32.  
  33. ; checks if n is a power of 2 (in other words, if n number of nodes makes a full tree
  34. (define (isFull n count)
  35.   (cond
  36.     [(= 1 n) #t]
  37.     [(< n (expt 2 count)) #f]
  38.     [else (isFull (/ n (expt 2 count)) (+ 1 count))]))
  39.  
  40. ; given number of nodes, gets height (in full levels) of tree
  41. (define (getFullHeight n count)
  42.   (cond
  43.     [(< n (expt 2 count)) count]
  44.     [else (getFullHeight (/ n (expt 2 count)) (+ 1 count))]))
  45.  
  46. ; given tree, gets number of nodes in tree
  47. (define (getNumNodes tree)
  48.   (cond
  49.     [(empty? tree) 0]
  50.     [else (+ 1 (getNumNodes (node-left tree)) (getNumNodes (node-right tree)))]))
  51.  
  52. ; make a full tree
  53. (define (makeFullTree height tree)
  54.   (cond
  55.     [(= height 0) empty]
  56.     [(= height 1) tree]
  57.     [true (makeFullTree (- 1 height) (make-node tree tree))]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement