Почему размер равен данным, которые были добавлены в двоичное дерево после вызова функции AddNode ()? - PullRequest
0 голосов
/ 17 ноября 2018

Когда я ввожу число, скажем, 20 как data , размер также становится (число, которое в данном случае равно 20, +1). Введенные данные всегда назначаются на размер , почему?!
Заранее спасибо.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//#include <memory>
//#include <alloc.h>

typedef struct node{
    struct node *right;
    struct node *left;
    int data;
}Node;

typedef struct tree{
    Node* root;
    int size;
}Tree;

void CreateTree(Tree *pt){
    pt->root = NULL;
    pt-> size = 0;
}

void AddNode(Tree *pt, int data){
    Node *parent, *current = pt->root;
    Node *pnew = (Node *)malloc(sizeof(Node));
    pnew-> data = data;
    pnew->right = NULL;
    pnew->left = NULL;
    pt->size++;

    if(!current){
        pt->root = pnew;
        return;
    }
    while(current){
        parent = current;
        if(pnew->data > current->data)
            current = current->right;
        else
            current = current->left;
    }

    if(pnew->data > parent->data)
        parent->right = pnew;
    else
        parent->left = pnew;
}

int TreeSize(Tree *pt){
    return pt->size;
}

int main(){

    int data;
    Tree *t;
    CreateTree(&t);

    printf("Enter the Element: ");
    scanf("%d",&data);
    AddNode(&t, data);

    printf("The Tree has %d element(s).\n", TreeSize(&t));

    getch();
    return 0;
}

Размер должен быть увеличен на 1, только когда я вызываю AddNode (), не равный данным каждый раз.

1 Ответ

0 голосов
/ 17 ноября 2018

относительно:

AddNode(&t, data);

Это делает параметр t (как видно, вызываемой функцией) равным pointer to pointer, однако вызываемая функция обрабатывает его как pointer.любые записи в него (и любые записи в смещения) приводят к неопределенному поведению.

В этом случае путем перезаписи переменной size

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