如何从后缀表达式创建二进制表达式树?

时间:2017-04-12 18:20:39

标签: c algorithm data-structures tree stack

我一直在尝试编写这段代码一段时间,即使我知道该怎么做,我仍然无法弄清楚我的错误。

目标是采用后缀表达式并将其转换为二进制表达式树,然后遍历它。

我的逻辑是:

  1. 如果它不是运算符,我创建了一个叶子节点'temp'(即temp->Left=temp->Right=NULL)并将其推送到基于数组的类型树堆栈。

  2. 如果是操作员,我将其插入树'T'然后弹出我的堆栈两次以添加T->LeftT->Right

  3. 然后我将结果'T'推入堆栈并循环迭代直到读取表达式。

  4. 我的循环迭代很好,甚至我的堆栈末尾还有一个条目,但我不能将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然后向右遍历。

    我非常感谢我能得到的任何帮助。如果我在发帖时犯了任何错误,请指导我,这样我就不会再这样做了。

0 个答案:

没有答案