二进制搜索树程序说root不命名类型

时间:2017-04-06 07:21:10

标签: c++ pointers initialization variable-assignment

我正在尝试在我的C ++编译器上执行二进制搜索树,但是当我在编译器上输入以下代码时,我得到的错误是9 [错误]' root'没有命名类型和19 [错误]期望的不合格ID在{' {'我尝试将指针根更改为整数,但它会产生转换错误。

#include<iostream>
using namespace std;
struct bstnode{
    int data;
    bstnode*left;
    bstnode*right;
};
bstnode* root;
root = 0;
bstnode*getnewnode(int data)
{
    bstnode* newnode=new bstnode();
    newnode->data=data;
    newnode->left=newnode->right=NULL;
    return newnode;

}
void insert(bstnode*root,int data);
{
    {

    if(root==NULL)
    root=getnewnode(data);

}
else if(data<=root->data)
{
    root->left=insert(root->left,data);
}
else
{
    root->right=insert(root->right,root);
}
return root;
}
bool search(bstnode*root,int data)
{
    if(root==NULL) return false;
    else if(root->data=data) return true;
    else if(data<=root->data) return search(root->left,data);
    else return search(root->right,data);
}
int main()
{
    bstnode*root=NULL;
    root=insert(root,15);
    root=insert(root,10);
    root=insert(root,12);
    int number;
    cout<<"enter no";
    cin>>no;


}

3 个答案:

答案 0 :(得分:1)

标记已删除,因此此部分现在不相关。

<德尔> 在你的代码中,`bstnode`不是**类型。你需要 - 使用`typedef`别名(模仿)一个类型 - 使用`struct bstnode`

那就是说,(考虑bstnode是一种有效的类型

bstnode* root;
root = 0;

错误,你不能在文件范围内有一个赋值语句,你需要使用一个初始化器,比如

bstnode* root = NULL;

之后,看起来,你根本就没有使用那个全局变量。

main()内,你有一个函数范围变量root,它会影响全局变量,你将内部范围变量传递给被调用的函数,所以全局变量没有被利用或者更需要,一点都不摆脱它。

答案 1 :(得分:0)

&#34; top&#34;文件级别只能包含声明和定义,但您可以在那里进行分配:

bstnode* root;
root = 0;

删除这些行;你没有使用那个变量。

答案 2 :(得分:0)

您需要定义bstnode* root = NULL;而不是上面的方式