在这里,我试图从给定的后缀表达式创建树。
当我试图执行第一个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];
}
最佳答案
您有一个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);
这就是你的代码死掉的原因。
关于c - 从后缀表达式创建树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16991288/