[ Aleksandar Vasic @ 18.02.2011. 10:52 ] @
Pozdrav, imam jedan malo cudan problem sa funkcijom za sabiranje svih elemenata binarnog stabla. Code: #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 Code: zbirel = zbirel + p->data; napisem Code: 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] |