【问题标题】:can anyone tell me whats wrong in my code of binary search tree insertion谁能告诉我我的二叉搜索树插入代码有什么问题
【发布时间】:2019-07-27 04:12:10
【问题描述】:

我试图在二叉搜索树中插入元素,没有递归(但这段代码只是插入根元素,没有其他元素)。我不知道哪里错了,这段代码应该可以工作,但不是,我我不擅长递归,互联网上的每个代码都带有递归,用于在二叉搜索树中插入元素。谁能告诉我,什么是错的,我应该如何纠正它? 这是代码

<#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);

}

【问题讨论】:

  • 对不起,代码从问题中的包含部分开始,我是堆栈溢出的新手

标签: search data-structures binary


【解决方案1】:

你永远不会在你的树中写,只有在本地 var ptr 中。在您的代码中,您应该在找到 NULL 子项时插入 temp。

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         
    }
}

【讨论】:

    猜你喜欢
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多