[英]Binary Search Tree c++
请帮助我使用这个 C++ 代码(我是初学者:P)它被窃听了......请告诉我我哪里出错了! 注意:我已经使用 cout 来调试...
#include<iostream>
using namespace std;
struct node
{
int val;
node* left;
node* right;
}*root;
void insrt(node* a,int n)
{
if(a==NULL)
{
a=new node;
a->val=n;
a->left=NULL;
a->right=NULL;
cout<<"_";
}
else if(a->val>n)
{
cout<<"<";
insrt(a->left,n);
}
else
{
cout<<">";
insrt(a->right,n);
}
}
int main()
{
int n,x,i;
cout<<"Enter the size: ";
cin>>n;
root=NULL;
for(i=0;i<n;i++)
{
cin>>x;
insrt(root,x);
}
return 0;
}
它编译甚至运行,但我得到的输出是:
Enter the size: 3
1
_2
_3
_
但它应该是:
Enter the size: 3
1
_2
>_3
>>_
您正在更改insrt
中a
的值,但这只是输入参数的副本。 更改insrt
中a
的值不会更改main
中root
的值。
解决此问题的一种方法是从insrt
返回有效节点并在main
使用它。
node* insrt(node* a,int n)
{
if(a==NULL)
{
a=new node;
a->val=n;
a->left=NULL;
a->right=NULL;
cout<<"_";
return a;
}
else if(a->val>n)
{
cout<<"<";
a->left = insrt(a->left,n);
}
else
{
cout<<">";
a->right = insrt(a->right,n);
}
return a;
}
int main()
{
int n,x,i;
cout<<"Enter the size: ";
cin>>n;
root=NULL;
for(i=0;i<n;i++)
{
cin>>x;
root = insrt(root,x);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.