Witam. Muszę dodać rekurencyjnie elementy do drzewa a następnie napisać funkcje również rekurencyjną, która zliczy sumę ich elementów. Dodać mi się udało, gorzej z sumą ;\ Albo liczy źle, albo zlicza tylko 1 element :| Dodam, że suma musi być przekazana przez parametr. Ktoś pomoże?
Oto kod:
#include <stdio.h>
#include <stdlib.h>
struct treenode
{
int data;
struct treenode *leftchild, *rightchild;
} *root;
void add (struct treenode **root, int data)
{
if (*root==NULL)
{
*root = (struct treenode*)malloc(sizeof(struct treenode));
if (*root)
{
(*root)->data=data;
(*root)->leftchild=(*root)->rightchild=NULL;
}
}
else
if ((*root)->data>=data)
add(&(*root)->leftchild, data);
else
add(&(*root)->rightchild, data);
}
void print (struct treenode *root)
{
if (root)
{
print(root->leftchild);
printf("%d\n", root->data);
print(root->rightchild);
}
}
void removetree (struct treenode **root)
{
if (*root)
{
removetree(&(*root)->leftchild);
removetree(&(*root)->rightchild);
free(*root);
*root=NULL;
}
}
int liczsume (struct treenode *root, int suma)
{
if (root)
{
suma=suma+root->data;
liczsume(root->leftchild, suma=suma+root->data);
liczsume(root->rightchild, suma=suma+root->data);
}
return suma;
}
int main()
{
add(&root, 4);
add(&root, 3);
add(&root, 2);
add(&root, 1);
add(&root, 0);
add(&root, 9);
add(&root, 8);
add(&root, 7);
add(&root, 6);
add(&root, 5);
print(root);
int suma=0;
printf("Suma : %d", liczsume(root, suma));
return 0;
}