2017-04-06 22 views
0

我想在我的C++編譯器上執行二叉搜索樹,但是當我在編譯器上輸入下面的代碼時,我得到錯誤說'[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; 


} 

回答

0

您需要定義bstnode* root = NULL;,而不是你在上面

1

標記將被刪除,所以這部分,現在是不相關的。

在你的代碼中,`bstnode`是**不是**類型。通過使用`typedef` 別名(模擬)一類 - - 你需要或者 用'結構bstnode`

這就是說,(考慮bstnode是一個有效的類型

bstnode* root; 
root = 0; 

是錯誤的,你不能在文件範圍內賦值語句,你需要使用一個初始化,像

bstnode* root = NULL; 

之後,它看起來像,你根本沒有使用該全局變量。

裏面main(),你有一個函數作用域變量root其陰影的全局變量,你傳遞一個內部範圍內變量調用的函數,所以全局變量沒有被利用或者說需要,在所有。擺脫這一點。

+0

做的方式已經定義了bstnode爲結構 – Saubhagya

+0

什麼意外的標記? – Saubhagya

0

「頂」文件級別只能包含聲明和定義,但你必須有一個任務:

bstnode* root; 
root = 0; 

刪除那些行;你沒有使用這個變量。

+0

意外的令牌怎麼樣? – Saubhagya

+0

@iCas你可以通過正確縮進'insert'函數來找到它。 – molbdnilo