Может кто-нибудь сказать мне, что не так в моем коде вставки двоичного дерева поиска - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь вставить элементы в бинарное дерево поиска без рекурсии (но этот код просто вставляет корневой элемент и никаких других элементов). Я не знаю, что не так, этот код должен работать, но это не так, я Я плохо разбираюсь в рекурсии, и каждый код в Интернете был с рекурсией для вставки элементов в двоичное дерево поиска. Может кто-нибудь сказать мне, что не так и как я должен это исправить ?? вот код

<#include<bits/stdc++.h>
using namespace std;
struct node
{
  int data;
  node *left;
  node *right;
}*root=NULL;
void insert(int data)
{   node* temp=new node;

  node *ptr=root;
  temp->data=data;
  temp->left=NULL;
  temp->right=NULL;
  if(ptr==NULL)
    {
      root=temp;

    }
  else
    {
      while(ptr!=NULL)
        {
          if(data<=(ptr->data))     
            {ptr=ptr->left;}
          else{
            ptr=ptr->right;
          }
        }//while loop ends here so that i get the ptr to be

      ptr=temp;
    }
}
void disp(node* ptr)
{
  if(ptr==NULL)
    return ;
  disp(ptr->left);
  cout<<ptr->data<<endl;
  disp(ptr->right);
}


int main()
{   
  insert(10);
  insert(11);
  insert(23);
  disp(root);

}

1 Ответ

0 голосов
/ 05 марта 2019

Вы никогда не пишете в своем дереве, только в локальном var ptr. В вашем коде вы должны вставить temp, когда найдете NULL дочерний элемент.

void insert(int data)
{
  node* temp=new node;
  node *ptr=root;
  temp->data=data;
  temp->left=NULL;
  temp->right=NULL;
  if(ptr==NULL)
    {
      root=temp;        
    }
  else
    {
      while(1)
        {
          if(data<=(ptr->data)) {
            if(ptr->left) ptr=ptr->left;
            else {ptr->left=temp; break;}
          }
          else{
            if(ptr->right) ptr=ptr->right;
            else {ptr->right=temp; break;}
          }
        }//while loop ends here so that i get the ptr to be         
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...