public ArvoreBinariaBusca() { this.raiz = null; }
private No Remover(No no, int x) { No ch, s; if (no == null) { Console.WriteLine(x + "nao encontrado"); maisBaixo = false; return(no); } if (x < no.info) // remover da subarvore a esquerda { no.noEsquerdo = Remover(no.noEsquerdo, x); if (maisBaixo == true) { no = VerificarRemocaoSubarvoreEsquerda(no); } } else if (x > no.info) // remover da subarvore a direita { no.noDireito = Remover(no.noDireito, x); if (maisBaixo == true) { no = VerificarRemocaoSubarvoreDireita(no); } } else { // chave para remocao encontrada if ((no.noEsquerdo != null) && (no.noDireito != null)) // 2 filhos { s = no.noDireito; while (s.noEsquerdo != null) { s = s.noEsquerdo; } no.info = s.info; no.noDireito = Remover(no.noDireito, s.info); if (maisBaixo == true) { no = VerificarRemocaoSubarvoreDireita(no); } } else // 1 filho ou nenhum filho { if (no.noEsquerdo != null) // apenas o filho esquerdo { ch = no.noEsquerdo; } else // apenas o filho direito ou nenhum filho { ch = no.noDireito; } no = ch; maisBaixo = true; } } return(no); }