2015-04-03 89 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)