2015-04-03 87 views
1

所以我正在做一個簡單的二叉樹來存儲整數,但我不斷收到一個「表達式必須有指針類類型」錯誤插入函數,這可能只是我沒有注意到的東西很明顯,但我相對較新的C++,所以任何幫助,將不勝感激。由於C++二叉樹指針問題

struct node 
{ 
    //Data stored in this node of the tree 
    int data; 
    //The left branch of the tree 
    node *left; 
    //The right branch of the tree 
    node *right; 
}; 

using namespace std; 

//Inserts a value into the tree 
void insert(node **tree, int value) 
{ 
    if (*tree == nullptr) 
    { 
     //Create new node 
     *tree = new node; 
     //Set new value 
     (*tree)->data = value; 
     //Set branches to nullptr 
     (*tree)->left = nullptr; 
     (*tree)->right = nullptr; 
    } 
    else 
    { 
     if (value < (*tree)->data) 
      insert(*tree->left, value);//ERROR HERE 
     if (value >(*tree)->data) 
      insert(*tree->right, value);//ERROR HERE 
    } 
} 

//Deletes the tree 
void delete_tree(node *tree) 
{ 
    if (tree != NULL) 
    { 
     delete_tree(tree->left); 
     delete_tree(tree->right); 
     delete tree; 
    } 
} 

//Prints the tree in order 
void inorder(node *tree) 
{ 
    if (tree != nullptr) 
    { 
      inorder(tree->left); 
      cout << tree->data << " "; 
      inorder(tree->right); 
    } 
} 

int main(int argc, char **argv) 
{ 
    while (true){ 
     //if(userinputflag=0) 
     //else node *tree = input number 
     node *tree = nullptr; 

     while (true) 
     { 
      int num; 
      cout << "Enter number (-1 to exit): "; 
      cin >> num; 

      if (num == -1) 
       break; 
      insert(&tree, num); 
     } 

     inorder(tree); 
     cout << endl; 

    } 
} 
+0

您是否嘗試過'插入(&((* tree) - > left),value);'already? – 2015-04-03 19:01:20

+0

您應該在這裏發佈之前刪除不相關的代碼*。 – 2015-04-03 19:01:29

回答

1

insert的簽名是:

void insert(node **tree, int value); 

您傳遞*tree->left,這是*(tree->left),這不是一個有效的表達式,因爲tree是而不是「指針類類型」,正如錯誤所暗示的那樣(它是指向類的指針)。

什麼,你本來打算爲(*tree)->left,這是一個有效的表達,但是這將是一個node*和我們的簽名要求一個node**,因此:

insert(&((*tree)->left), value); 
1

您作爲requier指針到指針到節點

void insert(node **tree, int value) 

這裏

insert(*tree->left, value);//ERROR HERE 

這不是一個有效的第一個參數。

我認爲你需要像這樣

insert(&((*tree)->left), value);//ERROR HERE 
1
insert(*tree->left, value) 

操作->具有更高的優先級比*。表達式tree->left在語法上是錯誤的,因爲tree類型的表達式爲node **。所以,嘗試 -

insert(&((*tree)->left), value)