我一直在尝试编写这段代码一段时间,即使我知道该怎么做,我仍然无法弄清楚我的错误。
目标是采用后缀表达式并将其转换为二进制表达式树,然后遍历它。
我的逻辑是:
如果它不是运算符,我创建了一个叶子节点'temp'(即temp->Left=temp->Right=NULL
)并将其推送到基于数组的类型树堆栈。
如果是操作员,我将其插入树'T'然后弹出我的堆栈两次以添加T->Left
和T->Right
。
然后我将结果'T'推入堆栈并循环迭代直到读取表达式。
我的循环迭代很好,甚至我的堆栈末尾还有一个条目,但我不能将InOrder,PostOrder或PreOrder遍历到结果上,因为它会导致我的程序崩溃。
我的主要代码是:
while(expression[i]!='\0'){
if(expression[i]==' '){
i++;
continue;
}
if(expression[i]!='*' &&
expression[i]!='/' &&
expression[i]!='-' &&
expression[i]!='+'){
temp = MakeEmpty(NULL);
temp=Insert(expression[i],temp);
Push(temp,S);
}else{
T=Insert(expression[i],T);
Operand2=TopAndPop(S);
Operand1=TopAndPop(S);
T=FullTree(Operand1,Operand2,T);
Push(T,S);
T=MakeEmpty(NULL); //It just needed to be reset
}
i++;
}
可以提供附加代码。
FullTree函数只将Operand1设置为T->Left
,将Operand2
设置为T->Right
。
InOrder遍历向左遍历,打印T->Element
然后向右遍历。
我非常感谢我能得到的任何帮助。如果我在发帖时犯了任何错误,请指导我,这样我就不会再这样做了。