Uma árvore binária contém dois filhos: filho direito e filho esquerdo.
struct tree_node {
tipo data;
tree left;
tree right;
}
Definições auxiliares
Operações
T = (tree)malloc (sizeof(tree_node));
if (T==NULL)
return ERRO;
*p_T = T;
DATA(T) = data;
LEFT(T) = NULL:
RIGHT(T) = NULL;
return OK;
}
int empty_tree(tree T) {
return (T==NULL) ? TRUE : FALSE;
}
5) Alocar um nó na árvore com data sendo a raiz e atribuir uma árvore à direita e outra
à esquerda
a) Travessia pré-ordem
if (empty_tree(T) == TRUE)
return OK;
rc = (*p_func_f)(DATA(T));
if (rc==OK)
rc = preorder_traverse(LEFT(T),p_func_f);
if (rc==OK)
rc = preorder_traverse(RIGHT(T),p_func_f);
return rc;
}
b) Travessia in-ordem
if (empty_tree(T) == TRUE)
return OK;
rc = inorder_traverse(LEFT(T),p_func_f);
if (rc==OK)
rc = (*p_func_f)(DATA(T),p_func_f);
if (rc==OK)
rc = inorder_traverse(RIGHT(T),p_func_f);
return rc;
}
c) Travessia pós-ordem
if (empty_tree(T) == TRUE)
return OK;
rc = postorder_traverse(LEFT(T),p_func_f);
if (rc==OK)
rc = inorder_traverse(RIGHT(T),p_func_f);
if (rc==OK)
rc = (*p_func_f)(DATA(T),p_func_f);
return rc;
}