Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct nodo{
- int valor;
- struct nodo* ptrHI;
- struct nodo* ptrHD;
- } TNodo;
- int preIndex = 0;
- void crear_arbol(TNodo ** ptrRaiz);
- void pre_orden(TNodo * ptrRaiz);
- void en_orden(TNodo * ptrRaiz);
- int search(int arr[], int strt, int end, int value);
- TNodo* Construir_Arbol(int[],int[],int ,int);
- void crear_arbol(TNodo ** ptrRaiz){
- *ptrRaiz = NULL;
- }
- void pre_orden(TNodo * ptrRaiz){
- if (ptrRaiz){
- printf("%d -", ptrRaiz->valor);
- pre_orden(ptrRaiz->ptrHI);
- pre_orden(ptrRaiz->ptrHD);
- }
- }
- void en_orden(TNodo * ptrRaiz){
- if (ptrRaiz){
- en_orden(ptrRaiz->ptrHI);
- printf("%d -", ptrRaiz->valor);
- en_orden(ptrRaiz->ptrHD);
- }
- }
- /* Funcion para encontrar el indice de un arreglo arr[start...end]
- La funcion asume que el valor esta en el arreglo in[] */
- int search(int arr[], int strt, int end, int value)
- {
- int i;
- for(i = strt; i <= end; i++)
- {
- if(arr[i] == value)
- return i;
- }
- }
- TNodo* Construir_Arbol(int in[], int pre[], int inStrt, int inEnd)
- {
- if(inStrt > inEnd)
- return NULL;
- /* Elige el nodo actual del arreglo preorden usando el pre-indice
- e incremento pre-indice */
- TNodo *tNode;
- tNode = (TNodo*)malloc(sizeof(TNodo));
- tNode->valor = pre[preIndex];
- tNode->ptrHI = NULL;
- tNode->ptrHD = NULL;
- preIndex++;
- /* Si este nodo no tiene hijos, retorno */
- if(inStrt == inEnd)
- return tNode;
- /* Else find the index of this node in Inorder traversal */
- int inIndex = search(in, inStrt, inEnd, tNode->valor);
- /* Using index in Inorder traversal, construct left and
- right subtress */
- tNode->ptrHI = Construir_Arbol(in, pre, inStrt, inIndex-1);
- tNode->ptrHD = Construir_Arbol(in, pre, inIndex+1, inEnd);
- return tNode;
- }
- int main(int argc, char** argv) {
- TNodo *ptrRaiz;
- int n=5;
- int in[] = {1,2,3,4,5};
- int pre[] = {4,2,1,3,5};
- crear_arbol(&ptrRaiz);
- ptrRaiz=Construir_Arbol(in,pre,0,n-1);
- pre_orden(ptrRaiz);
- printf("\n");
- en_orden(ptrRaiz);
- return (EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement