Рекурсивная вставка BST

Я h Я создал функцию для вставки в BST с использованием циклов, и она работает отлично. Теперь, когда я пишу, чтобы сделать это с помощью рекурсии, я не знаю, почему она не работает должным образом, однако логика верна в соответствии с меня. Кажется, что в дерево BST не добавляется новый узел, и голова дерева после выхода из функции вставки снова становится NULL.

#include <iostream>
using namespace std;

class node{
public:
   int data;
   node *right;
   node *left;
   node(){
      data=0;
      right=NULL;
      left=NULL;
   }
};

class tree{
   node *head;
   int maxheight;
   void delete_tree(node *root);
public:
   tree(){head=0;maxheight=-1;}
   void pre_display(node* root);
   node* get_head(){return head;}
   void insert(int key,node* current);
};

void tree::insert(int key,node *current){
   if(current==NULL)
   {
      node *newnode=new node;
      newnode->data=key;
      current=newnode;
   }
   else{
      if(key<current->data)
         insert(key,current->left);
      else
         insert(key,current->right);
   }
   return;
}

void tree::pre_display(node *root){
   if(root!=NULL)
   {
      cout<<root->data<<" ";
      pre_display(root->left);
      pre_display(root->right);
   }
}

int main(){
   tree BST;
   int arr[9]={17,9,23,5,11,21,27,20,22},i=0;

   for(i=0;i<9;i++)
   BST.insert(arr[i],BST.get_head());

   BST.pre_display(BST.get_head());
   cout<<endl;

   system("pause");
   return 0;
}

Подскажите, пожалуйста, что мне нужно изменить в алгоритме, чтобы он заработал.

5
задан Tyler Hyndman 18 November 2011 в 14:51
поделиться