2013-06-07 5 views
0

Здесь я пытаюсь создать дерево из данного постфиксного выражения. , когда я пытаюсь выполнить этот первый оператор printf, выполняется успешно, а второй - нет, и программа просто зависает.создание дерева из постфиксного выражения

mynode *create_tree(char postfix[]) 
    { 
     char symbol; 
     int i,k; 
     mynode *temp,*stack[100]; 
     for(i=k=0;(symbol=postfix[i])!='\0';i++) 
     { 
      temp=(mynode *)malloc(sizeof(mynode)); 
      temp->data=symbol; 
      temp->left=NULL; 
      temp->right=NULL; 
      //printf("%c",temp->data); 
      if(isalnum(symbol)) 
      { 
      stack[k++]=symbol; 
      } 
      else 
      { 
       temp->right=stack[--k]; 
       temp->left=stack[--k]; 
       //printf("%c %c\n",temp->left->data,temp->right->data); 
       stack[k++]=temp; 
      } 
     } 
     return stack[--k]; 
    } 
+0

Просьба уточнить, что вы подразумеваете под «программа просто зависает». Что произойдет, если вы запустите программу под отладчиком? –

ответ

2

У вас есть локальный массив mynode указателей, хранящихся в stack:

mynode *temp,*stack[100]; 

Это все неинициализированное.

Вы назначаете temp->right и temp->left каждый из неинициализированных mynode *

  temp->right=stack[--k]; 
      temp->left=stack[--k]; 

Затем вы пытаетесь разыменовать неинициализированный указатель, чтобы добраться до data элемента.

  //printf("%c %c\n",temp->left->data,temp->right->data); 

Именно поэтому ваш код умирает.

Смежные вопросы