#include #include typedef struct no_arvore no_arvore; struct no_arvore { int ra; no_arvore *esq, *dir; }; void inserir_iterativo(no_arvore **raiz, int novo_ra) { no_arvore *novo = malloc(sizeof(no_arvore)); novo->ra = novo_ra; novo->esq = NULL; novo->dir = NULL; if ((*raiz) == NULL) { *raiz = novo; return; } no_arvore *anterior = NULL; no_arvore *atual = *raiz; while (atual != NULL) { anterior = atual; if (atual->ra < novo_ra) atual = atual->dir; else atual = atual->esq; } if (anterior->ra < novo_ra) anterior->dir = novo; else anterior->esq = novo; } no_arvore *inserir_recursivo(no_arvore *atual, int ra) { if (atual == NULL) { no_arvore *novo = malloc(sizeof(no_arvore)); novo->ra = ra; novo->esq = NULL; novo->dir = NULL; return novo; } if (atual->ra < ra) atual->dir = inserir_recursivo(atual->dir, ra); else atual->esq = inserir_recursivo(atual->esq, ra); return atual; } void libera_arvore(no_arvore *atual) { if (atual == NULL) return; libera_arvore(atual->esq); libera_arvore(atual->dir); free(atual); } int main() { no_arvore *raiz = NULL; int valor = 10; inserir_iterativo(&raiz, valor); raiz = inserir_recursivo(raiz, valor); libera_arvore(raiz); return 0; }