почему содержание структуры может быть изменено в функции - PullRequest
1 голос
/ 10 марта 2020

Это операция по инерции X в BinTree, меня смущает то, что BST->Left не может быть изменено в шаге… changed однако, оно может быть изменено в шаге… или стерильно… , Я думаю, что эти три все шаги в функции, почему между ними есть разница, я буду признателен, если кто-то может мне помочь!

 BinTree Insert( BinTree BST, ElementType X ){
    if(!BST){
        BST=(BinTree)malloc(sizeof(struct TNode));
        BST->Data=X;①
        BST->Left=NULL;
        BST->Right=NULL;
    }else{
        if(X<BST->Data){
            **BST->Left=**Insert(BST->Left,X);②
        }else{
            **BST->Right=**Insert(BST->Right,X);③
    }
    return BST;
} 

1 Ответ

0 голосов
/ 10 марта 2020

Функция работает с копией указателя на узел root Двоичного дерева поиска. Изменение копии в этом операторе

    BST=(BinTree)malloc(sizeof(struct TNode));

не влияет на исходный указатель, переданный функции в качестве аргумента. Необходимо присвоить возвращенный указатель из функции исходному указателю на узел root дерева бинарного поиска, например,

BinTree root = NULL;
root = Insert( root, X );

В этих операторах

        BST->Left  = Insert(BST->Left,X);
        BST->Right = Insert(BST->Right,X);

вы выполняете назначение данных, членов Left и Right, которые передаются в thj-функцию по ссылке через указатель BST.

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