подсчет количества вершин в поддереве - PullRequest
1 голос
/ 02 апреля 2020

Я написал дерево AVL, я уверен, что оно работает правильно, но мой подсчет вершин не работает для поддерева. Помогите найти ошибку.

Я уверен, что ошибка есть в этой части функции удаления, если этого недостаточно, напишу ее полную часть. Если я в корне ошибочен, то подскажите, как реализовать алгоритм поиска количества вершин в поддереве для дерева AVL

class Node
{
public:
    int key;
    Node *left;
    Node *right;
    int height;
    int kol; // number of vertices in the subtree
};

Node* newNode(int key){
    Node* node = new Node();
    node->key = key;
    node->left = nullptr;
    node->right = nullptr;
    node->height = 1;
    node->kol = 1;
    return node;
}
Node* minValueNode(Node* node){
    Node* current = node;

    while (current->left != nullptr)
        current = current->left;
    return  current;
}

Node* deleteNode(Node* root, int key)
{
    if (root == NULL)
        return root;
    if ( key < root->key ){
        root->left = deleteNode(root->left, key);
        root->kol--;
    }
    else if( key > root->key ){
        root->right = deleteNode(root->right, key);
        root->kol--;
    }
    else
    {
        if( (root->left == NULL) ||
            (root->right == NULL) )
        {
            Node *temp = root->left ?
                         root->left :
                         root->right;
            if (temp == NULL)
            {
                temp = root;
                root = NULL;
            }
            else
            {
                int t = root->kol;
                *root = *temp;
                root->kol = t - 1;
            }

            free(temp);
        }
        else
        {
            Node* temp = minValueNode(root->right);
            root->key = temp->key;
            //root->kol = temp->kol;

            root->right = deleteNode(root->right,
                                     temp->key);
        }
    }

    if (root == NULL)
        return root;

    return root;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...