Advertisement
Guest User

Untitled

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