ACM_图论_表达式树

  

 二叉树是表达式处理的常用工具

                   其中每个叶子结点表示一个运算符;左子树是第一个运算数对应的表达式;右子树是第二个运算数对应的表达式;如何给表达式建立表达式树。有很多种方法,下面的方法是:找到“最后运算“的运算符(他是整棵表达式树的根);然后递归处理就是结果了;



一句话:每次找到最后计算的运算符,然后递归建树!



ACM_图论_表达式树 - Essence - ACM_Of_Essence
 

CODE

const int maxn =1000;
int lch[maxn], rch[maxn];char op[maxn];//每个结点的左右儿子编号和字符;
int nc=0;//结点数  node_conut
int bulid_tree(char *s,int x,int y)
{
    int i,c1=-1,c2=-1,p=0;
    int u;
    if(y-x==1)  //仅一个字符,建立单独结点
      {
          u=++nc;
          lch[u]=0;rch[u]=0;
          op[u]=s[x];
          return u;
      }
     for(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 bulid_tree(s,x+1,y-1);
  u=++nc;
  lch[u]=build_tree(s,x,c1);
  rch[u]=build_tree(s,c1+1,y);
  op[u]=s[c1];
  return u;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值