码迷,mamicode.com
首页 > 其他好文 > 详细

用二叉树处理表达式

时间:2018-02-13 23:36:59      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:建立   color   tree   二叉树   div   ==   字符   递归   class   

题目大意:

类似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;
}

 

用二叉树处理表达式

标签:建立   color   tree   二叉树   div   ==   字符   递归   class   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!