#include <stdio.h>
#include <stdlib.h>
struct no
{
int chave;
struct no *esq, *dir;
};
typedef struct no No;
No* cria_no(int chave);
No* insere_no(int chave, No* raiz);
int alturaArvore(No* );
void mostrarNivel(No*, int, int);
No* cria_no(int chave)
{
No
* novo
= (No
*) malloc(sizeof(No
)); novo->chave = chave;
novo->esq = novo->dir = NULL;
return novo;
}
No* insere_no(int chave, No* raiz)
{
No* novo = cria_no(chave);
No* pai, *aux;
if (raiz == NULL)
{
raiz = novo;
}
else
{
aux = raiz;
while (aux != NULL)
{
pai = aux;
if (chave < aux->chave)
aux = aux->esq;
else
{
aux = aux->dir;
}
}
if(chave < pai->chave)
pai->esq = novo;
else
{
pai->dir = novo;
}
}
return raiz;
}
int nivelArvore(No *raiz)
{
if (raiz == NULL)
{
return 0;
}
else
{
int alturaEsquerda = nivelArvore(raiz->esq);
int alturaDireita = nivelArvore(raiz->dir);
if (alturaEsquerda > alturaDireita)
{
return alturaEsquerda + 1;
}
else
{
return alturaDireita + 1;
}
}
}
void mostrarNivel(No* raiz, int nivelAtual, int nivelAlvo)
{
if (raiz == NULL)
{
return;
}
if (nivelAtual == nivelAlvo)
{
}
else
{
mostrarNivel(raiz->esq, nivelAtual + 1, nivelAlvo);
mostrarNivel(raiz->dir, nivelAtual + 1, nivelAlvo);
}
}
void mostrarArvore(No* raiz)
{
int altura = nivelArvore(raiz);
for (int i = 1; i <= altura; i++)
{
mostrarNivel(raiz, 1, i);
}
}
int main()
{
No* raiz = NULL;
int chave;
do
{
if (chave != -1)
{
raiz = insere_no(chave, raiz);
}
}
while(chave != -1);
mostrarArvore(raiz);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCgpzdHJ1Y3Qgbm8KewogICAgaW50IGNoYXZlOwogICAgc3RydWN0IG5vICplc3EsICpkaXI7Cn07CnR5cGVkZWYgc3RydWN0IG5vIE5vOwoKCk5vKiBjcmlhX25vKGludCBjaGF2ZSk7Ck5vKiBpbnNlcmVfbm8oaW50IGNoYXZlLCBObyogcmFpeik7CmludCBhbHR1cmFBcnZvcmUoTm8qICk7CnZvaWQgbW9zdHJhck5pdmVsKE5vKiwgaW50LCBpbnQpOwoKCk5vKiBjcmlhX25vKGludCBjaGF2ZSkKewogICAgTm8qIG5vdm8gPSAoTm8qKSBtYWxsb2Moc2l6ZW9mKE5vKSk7CiAgICBub3ZvLT5jaGF2ZSA9IGNoYXZlOwogICAgbm92by0+ZXNxID0gbm92by0+ZGlyID0gTlVMTDsKICAgIHJldHVybiBub3ZvOwp9CgpObyogaW5zZXJlX25vKGludCBjaGF2ZSwgTm8qIHJhaXopCnsKICAgIE5vKiBub3ZvID0gY3JpYV9ubyhjaGF2ZSk7CiAgICBObyogcGFpLCAqYXV4OwoKICAgIGlmIChyYWl6ID09IE5VTEwpCiAgICB7CiAgICAgICAgcmFpeiA9IG5vdm87CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgYXV4ID0gcmFpejsKICAgICAgICB3aGlsZSAoYXV4ICE9IE5VTEwpCiAgICAgICAgewogICAgICAgICAgICBwYWkgPSBhdXg7CiAgICAgICAgICAgIGlmIChjaGF2ZSA8IGF1eC0+Y2hhdmUpCiAgICAgICAgICAgICAgICBhdXggPSBhdXgtPmVzcTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhdXggPSBhdXgtPmRpcjsKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgaWYoY2hhdmUgPCBwYWktPmNoYXZlKQogICAgICAgICAgICBwYWktPmVzcSA9IG5vdm87CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcGFpLT5kaXIgPSBub3ZvOwogICAgICAgIH0KCiAgICB9CiAgICByZXR1cm4gcmFpejsKfQoKCmludCBuaXZlbEFydm9yZShObyAqcmFpeikKewogICAgaWYgKHJhaXogPT0gTlVMTCkKICAgIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBpbnQgYWx0dXJhRXNxdWVyZGEgPSBuaXZlbEFydm9yZShyYWl6LT5lc3EpOwogICAgICAgIGludCBhbHR1cmFEaXJlaXRhID0gbml2ZWxBcnZvcmUocmFpei0+ZGlyKTsKCiAgICAgICAgaWYgKGFsdHVyYUVzcXVlcmRhID4gYWx0dXJhRGlyZWl0YSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBhbHR1cmFFc3F1ZXJkYSArIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBhbHR1cmFEaXJlaXRhICsgMTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgbW9zdHJhck5pdmVsKE5vKiByYWl6LCBpbnQgbml2ZWxBdHVhbCwgaW50IG5pdmVsQWx2bykKewogICAgaWYgKHJhaXogPT0gTlVMTCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobml2ZWxBdHVhbCA9PSBuaXZlbEFsdm8pCiAgICB7CiAgICAgICAgcHJpbnRmKCIlZCAiLCByYWl6LT5jaGF2ZSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbW9zdHJhck5pdmVsKHJhaXotPmVzcSwgbml2ZWxBdHVhbCArIDEsIG5pdmVsQWx2byk7CiAgICAgICAgbW9zdHJhck5pdmVsKHJhaXotPmRpciwgbml2ZWxBdHVhbCArIDEsIG5pdmVsQWx2byk7CiAgICB9Cn0KCnZvaWQgbW9zdHJhckFydm9yZShObyogcmFpeikKewogICAgaW50IGFsdHVyYSA9IG5pdmVsQXJ2b3JlKHJhaXopOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGFsdHVyYTsgaSsrKQogICAgewogICAgICAgIG1vc3RyYXJOaXZlbChyYWl6LCAxLCBpKTsKICAgICAgICBwcmludGYoIlxuIik7CiAgICB9Cn0KaW50IG1haW4oKQp7CiAgICBObyogcmFpeiA9IE5VTEw7CiAgICBpbnQgY2hhdmU7CgoKICAgIGRvCiAgICB7CiAgICAgICAgc2NhbmYoIiVkIiwgJmNoYXZlKTsKICAgICAgICBpZiAoY2hhdmUgIT0gLTEpCiAgICAgICAgewogICAgICAgICAgICByYWl6ID0gaW5zZXJlX25vKGNoYXZlLCByYWl6KTsKICAgICAgICB9CiAgICB9CiAgICB3aGlsZShjaGF2ZSAhPSAtMSk7CgogICAgbW9zdHJhckFydm9yZShyYWl6KTsKCiAgICByZXR1cm4gMDsKfQo=