首页 > 其他 > 详细

用二叉树处理表达式

时间:2018-02-13 23:11:21      阅读:192      评论:0      收藏:0      [点我收藏+]

题目大意:

类似a+b*(c-d)-e/f

基本思路:

递归建立表达式树,优先级高的在深层次,注意括号,注意结合性,左结合就找优先级相同的当中在最右边的;

代码如下:

int nc=0;
int lch[maxn],rch[maxn];
char op[maxn];
int buildTree(char* s,int x,int y){
    int i,c1=-1,c2=-1,p=0,u;//c1代表+-位置,c2代表*/位置;
    if(y-x==1){//亲一个字符,建立单独节点;
        u=++nc;
        lch[u]=rch[u]=0;
        op[u]=s[x];
        return x;
    }
    for(int i=x;i<y;i++){
        switch(s[i]){
            case (:p++;break;
            case ):p--;break;
            case +: case -:if(!p) c1=i;break;
            case *: case /:if(!p) c2=i;break;
        }
    }
    if(c1<0) c1=c2;//找不到括号外的加减号,就用乘除号;
    if(c1<0) return buildTree(s,x+1,y-1);//整个表达式被一对括号括起来;
    u=++nc;
    lch[u]=buildTree(s,x,c1);
    rch[u]=buildTree(s,c1+1,y);
    op[u]=s[c1];
    return u;
}

 

用二叉树处理表达式

原文:https://www.cnblogs.com/imzscilovecode/p/8447648.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!