我试图创建一个从二叉搜索树中排除节点的函数。我想要做的第一件事是找到要删除的节点。我可以使用函数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
对此有何见解?