繁体   English   中英

C ++二叉树指针问题

[英]C++ binary tree pointers issue

所以我正在创建一个简单的二叉树来存储整数但是我在insert函数中一直得到一个“表达式必须有指针类型”的错误,这可能只是我没有注意到一些明显的东西,但我相对较新的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指向节点的指针

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不是“指向类的指针”,因为错误暗示(它是一个指针指向)终场到类)。

您的意图是(*tree)->left ,这是一个有效的表达式,但这将是一个node* ,我们的签名调用node** ,因此:

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

运算符->的优先级高于* 表达式tree->left在语法上是错误的,因为表达式中的tree类型是node ** 所以,试试 -

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM