在C ++中获取“预期的a;”错误消息

时间:2018-03-27 03:58:25

标签: c++

我在C ++中实现二进制搜索树。我编写了以下代码但由于某种原因,我收到一条错误消息:

  

预计a;

编译代码时我收到了上述信息。

我也是C ++的新手,如果我能得到一些帮助,我会非常感激。

二进制搜索树的一些上下文:

  

二进制搜索树使其键按顺序排列,以便查找   和其他操作可以使用二进制搜索的原则:何时   他们在寻找树中的钥匙(或插入新钥匙的地方)   遍历树从根到叶,与存储的密钥进行比较   在树的节点中,在比较的基础上决定,   继续搜索左侧或右侧子树。平均来说,这个   意味着每次比较都允许操作跳过大约一半   树,以便每次查找,插入或删除都需要时间   与存储在中的项目数的对数成比例   树。这比查找项目所需的线性时间要好得多   通过(未排序)数组中的键,但比相应的慢   对哈希表的操作。

#include<iostream>
using namespace std;

struct Node
{
    int data;

     Node *left, *right, *parent;

};
Node* DeleteNode(Node *root, int data);

void find_min(Node *root);

void inorder(Node *x);
void Insert(Node *root, int data);

//delete a node
//search_tree
//insert a node
//temp->parent = NULL;


int main()
{
    Node *root, *temp;

    //node with 20

    temp = new Node;
    temp->data = 20;
    temp->left = NULL;
    temp->right = NULL;
    root = temp;

    //node with 10 

    temp = new Node;
    temp->data = 10;
    temp->left = NULL;
    temp->right = NULL;
    temp->parent = NULL;

    root->left = temp;
    temp->parent = root;

    //node with 30

    temp = new Node;
    temp->data = 30;
    temp->left = NULL;
    temp->right = NULL;
    temp->parent = NULL;

    root->right = temp;

    temp->parent = root;

    //node with 25

    temp = new Node;
    temp->data = 25;
    temp->left = NULL;
    temp->right = NULL;
    temp->parent = NULL;

    root->right->left = temp;
    temp->parent = root->right;

    //node with 40

    temp = new Node;
    temp->data = 40;
    temp->left = NULL;
    temp->right = NULL;
    temp->parent = NULL;

    root->right->right = temp;
    temp->parent = root->right;

    //node with 2

    temp = new Node;
    temp->data = 2;
    temp->left = NULL;
    temp->right = NULL;
    temp->parent = NULL;

    root->left->left = temp;
    temp->parent = root->left;

    //node with 15

    temp = new Node;
    temp->data = 15;
    temp->left = NULL;
    temp->right = NULL;
    temp->parent = NULL;

    root->left->right = temp;

    temp->parent = root->left;

    find_min(root);
    cout << "Printing numbers in order" << endl;
    inorder(root);
    cout << "printing in-order of the given root" << endl;
    delete(root);
}

void find_min(Node *root)
{
    Node *temp;

    temp = root;

    while (temp->left != NULL)
        temp = temp->left;

    cout << "min number is  " << temp->data << endl;

}

void inorder(Node *x)
{

    if (x != NULL)
    {
        inorder(x->left);
        cout << x->data << endl;
        inorder(x->right);

    }
}
    Node* DeleteNode(Node *root, int data)
    {
        if (root->data == NULL) {

            return root;
        }
        // If the key to be deleted is smaller than the root's key,
        // then it lies in left subtree

        else if (data < root->data)
            root->left = DeleteNode(root->left, data);

        // If the key to be deleted is greater than the root's key,
        // then it lies in right subtree

        else if (data > root->data)
            root->right = DeleteNode(root->right, data);

            // case 1: No child
        else if (root->left == NULL & root->right == NULL)
                delete root;

        return root;

        //data < root->data  struct Node *temp = root;
        // case 2: one child
      if (root->left == NULL){
        Node *temp = root;
        root = root->right;
        delete temp;
        return root;
    }
    //
    else if (root->right == NULL) {
        Node *temp = root;
        root = root->left;
        delete temp;
        return root;
    }
    // case 3: two child
    else (root == root->right){
        root->data = temp->data;
        root->right = DeleteNode(root->right, temp->data);
        return root;
    }


}

1 个答案:

答案 0 :(得分:4)

这是您的问题:else (root == root->right){。如果您想将其作为条件,则需要使用else if(root == root->right)

请注意,根据Godbolt,即使使用该修补程序,您也会有更多错误(它们看起来很容易修复)。