Zedd 0 Denunciar post Postado Novembro 22, 2012 Olá pessoal é o seguinte : Estou tentando fazer uma função que retorne 1(indicando que existe) caso encontre em algum nó um elemento que o usuário queira e 0 caso não encontre. Consegui fazer com que a função retorne verdadeiro para indicar que o elemento existe,porém quando o usuário digita um elemento que não existe eu não consegui prosseguir. No processo recursivo da árvore binária quando ela termina de verificar todos os nós tem algum valor específico que ela retorna ou momento específico (linha de código que identifique o fim da busca de todos os elementos) ? Segue a minha função apenas verificando se existe (e como eu disse verifica tranquilo),se alguém puder me ajudar ficaria muito grato : int buscaE(arvore *raiz,int n) { if(raiz->info == n) return 1; return(buscaE(raiz->esq,n)); return (buscaE(raiz->dir,n)); } Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Novembro 26, 2012 A última linha da função nunca é executada. Você precisa se aproveitar da invariante de que, em uma árvore binária de busca, todos os filhos de um lado de um nó têm chaves menor que a dele, e todos os filhos do outro lado têm chave maior que a dele. Geralmente, os filhos à esquerda são menores e os à direita, maiores. Se houver elementos com chaves repetidas, é necessário estabelecer alguma constante sobre a posição de elementos cujas chaves forem iguais ao de uma raiz. A busca é simples: função buscar(raíz, chave) { se (raíz.chave == chave) retornar raíz.valor se (raíz.chave < chave e raíz.esquerda existe) retornar buscar(raíz.esquerda, chave) se (raíz.chave > chave e raíz.direita existe) returnar buscar(raíz.direita, chave) retornar falso } Tente escrever isto em C. Compartilhar este post Link para o post Compartilhar em outros sites