C++ 二叉树指针问题
C++ binary tree pointers issue
所以我正在制作一个简单的二叉树来存储整数,但我在插入函数中不断收到 "expression must have pointer-to-class type" 错误,这可能只是我没有注意到一些明显的东西,但我对 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;
}
}
你作为第一个参数 requier pointer-to-pointer to node
void insert(node **tree, int value)
这里
insert(*tree->left, value);//ERROR HERE
无效。
我想你需要这样的东西
insert(&((*tree)->left), value);//ERROR HERE
insert
的签名是:
void insert(node **tree, int value);
您正在传递 *tree->left
,它是 *(tree->left)
,这不是有效的表达式,因为 tree
不是 "pointer-to-class type",正如错误提示的那样(它是一个指向指向 class).
的指针
您的本意是 (*tree)->left
,这是一个有效的表达式,但那将是 node*
而我们的签名要求 node**
,因此:
insert(&((*tree)->left), value);
insert(*tree->left, value)
运算符 ->
的优先级高于 *
。表达式 tree->left
在语法上是错误的,因为表达式中的 tree
类型是 node **
。所以,试试 -
insert(&((*tree)->left), value)
所以我正在制作一个简单的二叉树来存储整数,但我在插入函数中不断收到 "expression must have pointer-to-class type" 错误,这可能只是我没有注意到一些明显的东西,但我对 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;
}
}
你作为第一个参数 requier pointer-to-pointer to node
void insert(node **tree, int value)
这里
insert(*tree->left, value);//ERROR HERE
无效。
我想你需要这样的东西
insert(&((*tree)->left), value);//ERROR HERE
insert
的签名是:
void insert(node **tree, int value);
您正在传递 *tree->left
,它是 *(tree->left)
,这不是有效的表达式,因为 tree
不是 "pointer-to-class type",正如错误提示的那样(它是一个指向指向 class).
您的本意是 (*tree)->left
,这是一个有效的表达式,但那将是 node*
而我们的签名要求 node**
,因此:
insert(&((*tree)->left), value);
insert(*tree->left, value)
运算符 ->
的优先级高于 *
。表达式 tree->left
在语法上是错误的,因为表达式中的 tree
类型是 node **
。所以,试试 -
insert(&((*tree)->left), value)