home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 02 / grdlagen / tree.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-11  |  1.7 KB  |  74 lines

  1. //----------------------------------------------------------
  2. //                        TREE.CPP                         -
  3. //        (c) 1991 by Thole Groeneveld & toolbox           -
  4. //----------------------------------------------------------
  5.  
  6. #include "tree.h"
  7.  
  8. void Tree::insert (Node* n, Node*& root)
  9. {
  10.  if ( root == NULL )
  11.       root = n;
  12.  else if ( *n < *root )
  13.            insert (n, root -> left);
  14.  else if ( *n > *root )
  15.            insert (n, root -> right);
  16.  else root -> equal (n);
  17. }
  18.  
  19. int Tree::remove (Node& n, Node*& root) {
  20.  if ( root == NULL )
  21.       return NULL;
  22.  else if ( n < *root )
  23.  return remove (n, root -> left);
  24.  else if ( n > *root )
  25.  return remove (n, root -> right);
  26.  else {
  27.  Node *tmp = root;
  28.  if ( root -> left == NULL )
  29.       root = root -> right;
  30.  else if ( root -> right == NULL )
  31.            root = root -> left;
  32.  else {
  33.         Node *tmp2 = root -> left;
  34.         while ( tmp2 -> right != NULL )
  35.                 tmp2 = tmp2 -> right;
  36.         tmp2 -> right = root -> right;
  37.         root = root -> left;
  38.       }
  39.  delete tmp;
  40.  return 1;
  41.  }
  42. }
  43.  
  44. void Tree::walk (Node *n) {
  45.  if ( n != NULL ) {
  46.       walk (n -> left);
  47.  n -> action();
  48.  walk (n -> right);
  49.  }
  50. }
  51.  
  52. void Tree::destroy (Node *n) {
  53.  if ( n != NULL ) {
  54.       destroy (n -> left);
  55.  destroy (n -> right);
  56.  delete n;
  57.  }
  58. }
  59.  
  60. Node *Tree::search (Node& n) {
  61.  Node *tmp = Root;
  62.  while ( tmp != NULL ) {
  63.          if ( n < *tmp )
  64.  tmp = tmp -> left;
  65.  else if ( n > *tmp )
  66.  tmp = tmp -> right;
  67.  else                                            // gefunden
  68. break;
  69. }
  70.  return tmp;
  71. }
  72. //----------------------------------------------------------
  73. //                  Ende von TREE.CPP                      -
  74.