各位有谁研究过这个,
比如把 将表达式 a*(b*(c+d)*e+f)+g
转换成 a*b*c*e+a*b*d*e+a*f+g
汇编忘的差不多了,现在正在找相应的资料,那位高手知道可否给个思路
比如把 将表达式 a*(b*(c+d)*e+f)+g
转换成 a*b*c*e+a*b*d*e+a*f+g
汇编忘的差不多了,现在正在找相应的资料,那位高手知道可否给个思路
调试欢乐多
{
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;
}
}
}
}
phommy(顽石宫主) public tree(string str);//由算式构造二叉树
这个应该怎么构造啊,对你所描述的二叉树还不怎么理解, 是a,b,c,d...都是叶子节点然后他们的父结点是“与” 或者 “或” 吧
当然,这个算法还要自己写...这个if判断了优先级:
if ((t.parent.text == "*" || t.parent.text == "/") && (t.text == "+") || t.text == "-")
如果子树代表的式子优先级低的话,就进行展开~tree(string str);
由算式构造二叉树,数据结构书上应该会有... tree.output()做了相反的事情~
phommy(顽石宫主) 我似乎有点看出来了, 你的是在求数学表达式计算吧,这个似乎跟 ”与或表达式“化简有区别的吧
数学表达式的计算在 http://www.codeproject.com/csharp/binary_tree_expressions.asp可以找到,
但我不觉得这个和我要得”与或表达式化简“一样
简单算式:算式,复杂算式:算式(增加 Add(算式),和Remove(算式)两个方法)
最后装配完成,一个Parse()完成计算。看看设计模式之组合模式吧
现在的人厉害的哇,上来就是模式了,架构了, 恩,看了自己要努力学习了^_^