Binary Search Tree C++ Implementation(dynamic memory problems) -


i learning how implement binary search tree, using more rudimentary c approach(please no "use classes now"). however, there big problem dynamic memory getting deleted. head value gets updated correctly, however, every other point gets deleted. can me? also, nice if offer tips how tighten implementation of tree. basic rundown of program: input character , run 1 of tree's functions. mind though, implementation pure bst, no balancing. thank you.

#include <iostream>  struct point{     point* parent, *left, *right;      int val = -1; };  point* biggest; point empty;  point search(int pos, bool near, point* loc = biggest){     if(loc->val == pos){         return *loc;     } else if(loc->left->val != -1 , loc->val > pos){         return search(pos, near, loc->left);     } else if(loc->right->val != -1){         return search(pos, near, loc->right);     }      if(near){         return *loc;     } else{         point fail;         return fail;     } }  void insert(int pos, point* res){     point loc = search(pos, true);     res->val = pos, res->left = &empty, res->right = &empty, res->parent = &loc;     if(loc.val < res->val){         loc.left = res;     } else{         loc.right = res;     }  }  void remove(int pos){  }  int pred(int pos){     point res = search(pos, false);     if(res.val == -1){         return -1;     }  }  int succ(int pos){     point res = search(pos, false);     if(res.val == -1){         return -1;     }  }  void inorder(point* pos = biggest){     if(pos->left->val != -1){         inorder(pos->left);     }     std::cout << pos->val << " ";     if(pos->right->val != -1){         inorder(pos->right);     } }  int main() {     point start;     start.parent = &empty, start.left = &empty, start.right = &empty;     biggest = &start;     char c;     int pos;     do{         std::cin >> c >> pos;          switch (c){             case 's':                 std::cout << search(pos, false).val << std::endl;                 break;             case 'i':                 if(biggest->val == -1){                     start.val = pos;                 } else{                     point* res = new point;                     insert(pos, res);                 }                 break;             case 'r':                 remove(pos);                 break;             case 'p':                 std::cout << pred(pos) << std::endl;                 break;             case 'n':                 std::cout << succ(pos) << std::endl;                 break;             case 'o':                 inorder();                 std::cout << std::endl;                 break;         }     } while(c != '0');     return 0; } 

apart weirdness in code here :

void insert(int pos, point* res){     point loc = search(pos, true);     res->val = pos, res->left = &empty, res->right = &empty;     res->parent = &loc; // <=== here 

you modify res->parent point @ local variable loc. after insert() function returns point loc not exist anymore.

also are using classes; c++ structs , classes pretty identical ... apart default member visibility.


Comments

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -