#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

typedef struct _cvor
{
       int br;
       char sgn;
       int is_no;
       struct _cvor *left,*right;
} cvor;
int i=0;
cvor* strToTree(char** s)
{
      int len = strlen(*s);
      cvor* novi= (cvor*)malloc(sizeof(cvor));
      if(novi==NULL)
      {
	  printf("Greska pri alokaciji memorije\n");
	  exit(1);
      }
	 
	 /*oznacavamo kraj stringa*/
	  *((*s)+len) = 'x';
    
	 /*preskacemo beline*/
      if(**s==' ')
		while(*(++(*s))==' ');
    
      /*stavljamo znak u cvor*/
      novi->sgn = **s;
      novi->is_no = 0;

      /*preskacemo beline*/
      while(*(++(*s)) ==' ');

      /*proveravmo da li je broj sledeci argument, ako jeste */
      /*nalazimo ga i pravimo left list */
	  
      putchar(**s);
      if((**s >= '0') && (**s <= '9'))
      {
	   int n=0;
	   cvor* left= (cvor*)malloc(sizeof(cvor));
	   if(left==NULL)
	   {
	      printf("Greska pri alokaciji memorije\n");
	      exit(1);
	   }
	   novi->left = left;
	   while((**s >= '0') && (**s < '9') && (**s!='x') )
		 n = n*10 + (*((*s)++) - '0');
	   left->is_no =1;
	   left->br = n;
      }
     /*ako nije broj onda je znak /* + -, pod pretpostavkom da je */
			   /*iraz tacno unet */
      else
	  novi->left = strToTree(s);

      /*preskacemo beline*/
      while(*(++(*s))==' ');

      /*proveravmo da li je broj sledeci argument, ako jeste */
      /*nalazimo ga i pravimo left list */

      if(**s >= '0' && **s <= '9')
      {
	   int n=0;
	   cvor* right= (cvor*)malloc(sizeof(cvor));
	   if(right==NULL)
	   {
	      printf("Greska pri alokaciji memorije\n");
	      exit(1);
	   }
	   novi->right = right;
	   while((**s > '0') && (**s < '9') && (**s!='x') )
	       n = n*10 + (*((*s)++) - '0');
	   right->is_no =1;
	   right->br = n;
      }
     /*ako nije broj onda je znak /* + -, pod pretpostavkom da je */
			   /*iraz tacno unet */
      else
	  novi->right = strToTree(s);
      return novi;
}

void treePrint(cvor* koren)
{
	if(!koren)
		return;
	if(koren->is_no)
	{
		printf(" %d ",koren->br);
		return;
	}
	else
	{
		printf("(");
		treePrint(koren->left);
		printf("%c",koren->sgn);
		treePrint(koren->right);
		printf(")");
	}
}
int main(int argc,char *argv[])
{
     char *s = "  + 2  5 ";
     cvor* koren = strToTree(&s);
     printf("\n\n\n %d \n",koren->right->br);
     treePrint(koren);
}

