2014-05-22 1 views
0

이 코드는 노드를 제거하거나 이진 트리에서 리프를 떼어 내기 위해 사용합니다. 여기서 'elemento'는 사용자가 입력 한 값이고 raiz는 내 트리입니다.사용자가 값을 제거하려고하지만이 값이 이진 트리에 없습니다. 그것을 치료하는 방법?

내 문제는 : 사용자가 트리에없는 숫자 (elemento)를 입력하면 어떻게해야할지 모르겠다. 나는 몇 가지 방법을 시도했지만 아무 것도 효과가 없었습니다. 값을 찾을 수 없을 때 무언가를 출력하고 싶습니다.

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); 
} 
}; 

감사 :

다음은 기능 코드입니다.

답변

1

기본적으로 요소가 현재 노드의 값과 같지 않고 현재 노드의 관련 자식이 NULL이면 요소가 존재하지 않습니다. 예 :

if ((elemento > (*raiz)->valor && (*raiz)->dir == NULL) || ((elemento < (*raiz)->valor && (*raiz)->esq == NULL)){ 
    printf("Element not found."); 
    return; 
} 

성공/실패를 나타낼 수있는 값을 removeNo에서 반환하는 것이 좋습니다.

+0

고맙습니다. –

0

코드 진술 문은 사용자가 같거나 더 크지 않은 경우 사용자가 동일한 (따라서 존재하는) 트리에 있다고 가정합니다. 보다 작거나 같지 않은 것을 찾은 후에! null을 확인하고 그 요소가 존재하는지 확인해야합니다.

null 검사가 true이거나 요소가있는 경우 트리가 가로 지르지 만 값이 존재하지 않기 때문에 실패를 나타내는 무언가를 수행합니다.

관련 문제