imam jedan malo cudan problem sa funkcijom za sabiranje svih elemenata binarnog stabla.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct tnode
{
int data;
struct tnode *lchild, *rchild;
};
void zbir(struct tnode *p)
{
int zbirel;
zbirel=0;
if(p != NULL)
{
zbir(p->lchild);
zbirel = zbirel + p->data;
zbir(p->rchild);
}
printf("%d", zbirel);
}
struct tnode *insert(struct tnode *p,int val)
{
struct tnode *temp1,*temp2;
if(p == NULL)
{
p = (struct tnode *) malloc(sizeof(struct tnode));
if(p == NULL)
{
printf(" Greska \n");
exit(0);
}
p->data = val;
p->lchild=p->rchild=NULL;
}
else
{
temp1 = p;
while(temp1 != NULL)
{
temp2 = temp1;
if( temp1 ->data > val)
temp1 = temp1->lchild;
else
temp1 = temp1->rchild;
}
if( temp2->data > val)
{
temp2->lchild = (struct tnode*)malloc(sizeof(struct tnode));
temp2 = temp2->lchild;
if(temp2 == NULL)
{
printf(" Greska \n");
exit(0);
}
temp2->data = val;
temp2->lchild=temp2->rchild = NULL;
}
else
{
temp2->rchild = (struct tnode*)malloc(sizeof(struct tnode));
temp2 = temp2->rchild;
if(temp2 == NULL)
{
printf(" Greska \n");
exit(0);
}
temp2->data = val;
temp2->lchild=temp2->rchild = NULL;
}
}
return(p);
}
void main()
{
struct tnode *root = NULL;
int n,x,zbirr;
printf("\nUneti broj cvorova u drvetu \n");
scanf("%d",&n);
while( n > 0)
{
printf(" Uneti vrednost koja se smesta u cvor \n");
scanf("%d",&x);
root = insert(root,x);
n--;
}
zbir(root);
getch();
}
Rekurzivna funkcija zbir bi trebalo da prodje kroz sve elemente stabla i da ih sabere, a zatim ispise vrednost, medjutim
dobija se nesto sasvim cudno, za elemente stabla 1,2,3 dobija se zbir 0000123.
Ukoliko umesto reda
zbirel = zbirel + p->data;
napisem
printf("%d", p->data);
dobijem 1,2,3 sto znaci da funkcija prolazi dobro kroz elemente stabla, ali ne sabira kako treba?
[Ovu poruku je menjao Mihajlo Cvetanović dana 18.02.2011. u 12:22 GMT+1]