繁体   English   中英

二叉搜索树 C++

[英]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
>>_

您正在更改insrta的值,但这只是输入参数的副本。 更改insrta的值不会更改mainroot的值。

解决此问题的一种方法是从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM