我正在尝试在二进制搜索树中插入元素,而无需递归(但是此代码只是插入根元素,而没有其他元素)。我不知道出什么问题了,该代码应该可以工作,但不能,我递归效果不好,Internet上的每个代码都具有递归功能,可以在二进制搜索树中插入元素。谁能告诉我,怎么了,我该如何纠正? 这是代码
<#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);
}
答案 0 :(得分:0)
您永远不会在树中书写,而仅在本地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
}
}