我在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返回一个可以表示成功/失败的值。

09-25 21:19