使用C更改函数内的结构指针

时间:2017-06-01 21:25:15

标签: c pointers struct binary-tree

我试图创建一个从二叉搜索树中排除节点的函数。我想要做的第一件事是找到要删除的节点。我可以使用函数searchNode来做到这一点,在函数exclude中调用它。但是当函数searchNode返回时,我感兴趣的节点的指针地址丢失了,我无法理解为什么。

在下面的代码中,指针aux3将在函数seachNode完成之前指向正确的结构。我希望在seachNode完成后aux3可以保持相同的地址,所以它的值可以在exclude函数中使用。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <math.h>

struct node{
    int data;
    struct node* right;
    struct node* left;
} *root;

void insertAux(struct node** rootAux, int value){
    struct node* aux;
    aux = (struct node*)malloc(sizeof(struct node));
    aux->data = value;
    aux->right = aux->left = NULL;
    *rootAux = aux;
}

void insert(struct node* rootAux,int value){

    if (rootAux == NULL) {
        insertAux(&root, value);
        return;
    }
    else if (value < rootAux->data) {
        if(rootAux->left == NULL){
            insertAux(&(rootAux->left), value);
            return;
        }
        else
            insert(rootAux->left, value);
    }
    else if (value > rootAux->data) {
        if(rootAux->right == NULL){
            insertAux(&(rootAux->right), value);
            return;
        }
        else
            insert(rootAux->right, value);
    }
}

void searchNode(struct node** aux3, int value){
    struct node* aux2;

    if (aux3 == NULL) return;

    if (value < (*aux3)->data) {
        aux2 = (*aux3)->left;
        searchNode(&aux2, value);
    }
    if (value > (*aux3)->data) {
        aux2 = (*aux3)->right;
        searchNode(&aux2, value);
    }
    if (value == (*aux3)->data) {
        printf("Node value inside function searchNode: %d\n", (*aux3)->data);
        return;
    }
}

void exclude(int value){
    struct node* aux, *aux2;
    aux = root;

    if (aux == NULL) return;
    searchNode(&aux, value);
    printf("Node value inside function exclude: %d\n",aux->data);
}


void main(){
    root = NULL;
    insert(root, 15);
    insert(root, 7);
    insert(root, 6);

    exclude(6);
}

输出

Node value inside function searchNode: 6
Node value inside function exclude: 15

但它应该是

Node value inside function searchNode: 6
Node value inside function exclude: 6

对此有何见解?

0 个答案:

没有答案