各位有谁研究过这个,
比如把 将表达式 a*(b*(c+d)*e+f)+g 
转换成 a*b*c*e+a*b*d*e+a*f+g  
汇编忘的差不多了,现在正在找相应的资料,那位高手知道可否给个思路

解决方案 »

  1.   

    tree类里的东东没写... 其实里面的东东才难弄~_~public class Class1
    {
        class tree //二叉树
        {
            public tree parent, left, right;
            public string text;        public tree();
            public tree(tree T);
            public tree(string str);//由算式构造二叉树
            public tree(tree tleft, string text, tree tright);//构造二叉树
        };    public string func1(string input)
        {
            tree T = new tree(input), t;
            foreach (tree t in T.nodes)
            {
                if ((t.parent.text == "*" || t.parent.text == "/") && (t.text == "+") || t.text == "-")
                {
                    tree tmp;                if (t.parent.left.Equals(t))
                    {
                        tmpright = new tree(t.parent.right);
                    }
                    else
                    {
                        tmpleft = new tree(t.parent.left);
                    }                t.parent.left = new tree(tmp, t.parent.text, t.left);
                    t.parent.right = new tree(tmp, t.parent.text, t.right);
                    t.parent.text = t.text;
                }
            }
        }
    }
      

  2.   

    to :
       phommy(顽石宫主)      public tree(string str);//由算式构造二叉树
       这个应该怎么构造啊,对你所描述的二叉树还不怎么理解, 是a,b,c,d...都是叶子节点然后他们的父结点是“与” 或者 “或” 吧
      

  3.   

    func1有来做什么事的,,()的优先级在哪里体现呢
      

  4.   

    呃 我写的太粗心了... func1应该返回要求的那个等式~ 在最后加上 return T.output();
    当然,这个算法还要自己写...这个if判断了优先级:
    if ((t.parent.text == "*" || t.parent.text == "/") && (t.text == "+") || t.text == "-")
    如果子树代表的式子优先级低的话,就进行展开~tree(string str);
    由算式构造二叉树,数据结构书上应该会有... tree.output()做了相反的事情~
      

  5.   

    to :
       phommy(顽石宫主) 我似乎有点看出来了, 你的是在求数学表达式计算吧,这个似乎跟 ”与或表达式“化简有区别的吧
    数学表达式的计算在 http://www.codeproject.com/csharp/binary_tree_expressions.asp可以找到,
    但我不觉得这个和我要得”与或表达式化简“一样
      

  6.   

    完全可以用面向对象的编程方法来解决,自己定义个语法解析器装配到各自类型的算法器中这样不单单是一个计算器的功能,如Sql解析,或者类似问题的解决方案。定义一个算式接口(Parse()方法)
    简单算式:算式,复杂算式:算式(增加 Add(算式),和Remove(算式)两个方法)
    最后装配完成,一个Parse()完成计算。看看设计模式之组合模式吧
      

  7.   

    to lxwin01(阿幸) :   老大基本的东西都没出来,就不要谈什么设计模式了。
    现在的人厉害的哇,上来就是模式了,架构了, 恩,看了自己要努力学习了^_^