c - A certain level of a binary tree to array -
i need put inside array, values of binary tree, thing is, should put inside array values @ depth. , should output number of elements inserted @ array.
i have made this:
int nivel2_(abin a, int n, int v[], int level, int *i){ int t; if(!a) return 0; if(n == level){ v[(*i)++] = a->value; return 1; }else{ t = nivel2_(a->left, n, v, level+1, i) + nivel2_(a->right, n, v, level+1, i); } return t; } int nivel2(abin a, int n, int v[]){ int k = 0; int *i; = &k; return nivel2_(a, n, v, 1, i); } as keep changing index recursively , when reach depth want, thought of using pointer, way, when 1 part of recursive folding happens change value other folding processes. makes sense?
structures:
typedef struct slist { int value; struct slist* next; } *slist; typedef struct arvbin* abin; typedef struct arvbin { int value; abin right; abin left; } arvb; does work?
only when want elements of first level of depth!
calling this:
nivel2(tree2, 1, v); complete code
#include <stdio.h> #include <stdlib.h> typedef struct slist { int value; struct slist* next; } *slist; typedef struct arvbin* abin; typedef struct arvbin { int value; abin right; abin left; } arvb; int nivel2_(abin a, int n, int v[], int level, int *i){ int t; if(!a) return 0; if(n == level){ v[(*i)++] = a->value; return 1; }else{ t = nivel2_(a->left, n, v, level+1, i) + nivel2_(a->right, n, v, level+1, i); } return t; } int nivel2(abin a, int n, int v[]){ int k = 0; int *i; = &k; return nivel2_(a, n, v, 1, i); } void inserttree(abin *tree, int val){ if((*tree)==null){ *tree = (abin) malloc(sizeof(arvb)); (*tree)->value = val; (*tree)->left = null; (*tree)->right = null; return; } else if(val > (*tree)->value) { inserttree(&((*tree)->right), val); } else if(val <= (*tree)->value) { inserttree(&((*tree)->left), val); } return; } int main(){ int v[10] = {0}; abin tree2 = null; inserttree(&tree2, 22); inserttree(&tree2, 1); inserttree(&tree2, 3); nivel2(tree2, 1, v); int i; for(i=0; i<5; i++){ printf("%d\n", v[i]); } return 0; }
the code looks ok me. here's mildly modified version, tree printing function added, , diagnostics, , extended tree. suspicion expected tree have 2 levels, had 3.
code
#include <stdio.h> #include <stdlib.h> typedef struct slist { int value; struct slist* next; } *slist; typedef struct arvbin* abin; typedef struct arvbin { int value; abin right; abin left; } arvb; static int nivel2_(abin a, int n, int v[], int level, int *i) { int t = 0; if (a) { if (n == level) { v[(*i)++] = a->value; t = 1; } else { t += nivel2_(a->left, n, v, level + 1, i); t += nivel2_(a->right, n, v, level + 1, i); } } return t; } static int nivel2(abin a, int n, int v[]) { int k = 0; int r = nivel2_(a, n, v, 1, &k); printf("r = %d; k = %d\n", r, k); return k; } static void inserttree(abin *tree, int val) { if ((*tree) == null) { *tree = (abin) malloc(sizeof(arvb)); (*tree)->value = val; (*tree)->left = null; (*tree)->right = null; return; } else if (val > (*tree)->value) { inserttree(&((*tree)->right), val); } else if (val <= (*tree)->value) { inserttree(&((*tree)->left), val); } } static void tree_to_array(abin tree, int level) { int v[10] = { 0 }; int n = nivel2(tree, level, v); printf("converted level %d array:", level); (int = 0; < n; i++) printf(" %d", v[i]); putchar('\n'); } static void print_tree(abin tree, int level) { if (tree != 0) { printf("level %d: %d\n", level, tree->value); print_tree(tree->left, level + 1); print_tree(tree->right, level + 1); } } int main(void) { abin tree2 = null; inserttree(&tree2, 22); inserttree(&tree2, 10); inserttree(&tree2, 13); inserttree(&tree2, 33); inserttree(&tree2, 39); inserttree(&tree2, 43); inserttree(&tree2, 19); print_tree(tree2, 1); (int level = 1; level < 5; level++) tree_to_array(tree2, level); return 0; } sample output
level 1: 22 level 2: 10 level 3: 13 level 4: 19 level 2: 33 level 3: 39 level 4: 43 r = 1; k = 1 converted level 1 array: 22 r = 2; k = 2 converted level 2 array: 10 33 r = 2; k = 2 converted level 3 array: 13 39 r = 2; k = 2 converted level 4 array: 19 43 that looks correct me tree shape that's printed.
Comments
Post a Comment