#include #include #include "abin.h" // ABin balanceada: |peso(esq) - peso(dir)| <= 1 int balanceada(ABin a){ if(a == NULL) return 1; else{ if(abs(peso(a->esq) - peso(a->dir)) <= 1) return (balanceada (a->esq) && balanceada (a->dir)); else return 0; } } int max(int a, int b){ return (a > b) ? a : b; } int peso(ABin a){ if(a == NULL) return 0; else return 1 + max(peso(a->esq), peso(a->dir)); } int contaNodos(ABin a){ if(a == NULL) return 0; else return 1 + peso(a->esq) + peso(a->dir); } ABin insABin(ABin a, int x){ ABin aux; if(a == NULL){ aux = malloc(sizeof(NodoABin)); aux->valor = x; aux->esq = NULL; aux->dir = NULL; return aux; } else{ if(x > a->valor) a->dir = insABin(a->dir, x); else a->esq = insABin(a->esq, x); return a; } } void inorder(ABin a){ if(a != NULL){ inorder(a->esq); printf("%d ", a->valor); inorder(a->dir); } } void preorder(ABin a){ if(a != NULL){ printf("%d ", a->valor); preorder(a->esq); preorder(a->dir); } } void posorder(ABin a){ if(a != NULL){ posorder(a->esq); posorder(a->dir); printf("%d ", a->valor); } }