构建表达式树

来源:互联网 发布:董洁 王大治 知乎 编辑:程序博客网 时间:2024/05/17 01:10

方法输入后缀表达式,如果输入的是中缀表达式,则利用栈,转换成后缀表达式,然后检测每一个输入字符,如果操作数,则把该数的地址压入栈中,如果是操作符,则把栈的栈顶元素和栈顶元素的下一个元素出栈,分别为操作符的左子树和右子树,然后把该操作符的地址压入栈中,最后中序递归输出


<span style="font-size:14px;">#include <iostream>#include <string.h>#include <stack>using namespace std;typedef struct bitnode{    char data;    struct bitnode* lchild;    struct bitnode* rchild;}bitnode,*bitree;bitree createnode(char ch){    bitree bt;    bt=(bitree)malloc(sizeof(bitnode));    bt->data=ch;    bt->lchild=NULL;    bt->rchild=NULL;    return bt;}void create(bitree &bt){    stack<bitree> st;    char ch;    while((ch=getchar())!='\n')    {        bt=createnode(ch);        if(ch=='+' || ch=='-' || ch=='*' || ch=='/')        {            bitree right=st.top();            st.pop();            bitree left=st.top();            st.pop();            bt->lchild=left;            bt->rchild=right;            st.push(bt);        }        else        {            st.push(bt);        }    }}void ontraverse(bitree bt){    if(bt!=NULL)    {        ontraverse(bt->lchild);        cout<<bt->data;        ontraverse(bt->rchild);    }}int main(){    bitree bt;    create(bt);    ontraverse(bt);}</span>


0 0