我在C语言中有这段代码用于从二叉树中删除节点或叶子,其中“ elemento”是用户输入的值,而raiz是我的树。
我的问题是:如果用户输入不在树中的数字(元素),我不知道该怎么办。我尝试了一些方法,但是没有任何效果。我希望它在找不到值时打印一些东西。
这是功能代码:
void removerNo(no **raiz, int elemento)
{
if(elemento < (*raiz)->valor){
removerNo(&(*raiz)->esq,elemento);
}
else if(elemento > (*raiz)->valor){
removerNo(&(*raiz)->dir,elemento);
}
else if((*raiz)->esq!=NULL && (*raiz)->dir!=NULL){
no *aux = NULL;
aux = DoisFilhos((*raiz)->dir);
(*raiz)->valor = aux->valor;
removerNo(&(*raiz)->dir,(*raiz)->valor);
} else{
no *aux = (*raiz);
if((*raiz)->esq==NULL){
(*raiz) = (*raiz)->dir;
}
else{
*raiz = (*raiz)->esq;
}
free(aux);
}
};
谢谢。
最佳答案
基本上,如果元素不等于当前节点的值并且当前节点的相关子级为NULL,则该元素不存在。例如
if ((elemento > (*raiz)->valor && (*raiz)->dir == NULL) || ((elemento < (*raiz)->valor && (*raiz)->esq == NULL)){
printf("Element not found.");
return;
}
我建议从removeNo返回一个可以表示成功/失败的值。