public static string StkCalculTest(string infix) { StringBuilder sb = new StringBuilder(); var posfix = SSCLCLTR.ConvertInfixToPosfixTest(infix); foreach (var e in posfix) { if (e is double) { sb.AppendFormat("{0} ", e); } if (e is SSCLCLTR.SimpleBinaryOperator) { sb.AppendFormat("{0} ", ((SSCLCLTR.SimpleBinaryOperator)e).expr); } } return(sb.ToString()); }
public static void CalTest1() { string exp = "1 + 3 - (6 - 3 *7)/3"; ArrayList posfix = SSCLCLTR.ConvertInfixToPosfixTest(exp); SimpleBinaryTreeNode exptree = SSCLCLTR.MakeExpTree(posfix); exptree.Traverse(SimpleBinaryTreeNode.PostOrder, (SimpleBinaryTreeNode nd) => { Console.Write(nd.Data); }); Console.WriteLine(); exptree.Traverse(SimpleBinaryTreeNode.InOrder, (SimpleBinaryTreeNode nd) => { Console.Write(nd.Data); }); Console.WriteLine(); exptree.Traverse(SimpleBinaryTreeNode.PreOrder, (SimpleBinaryTreeNode nd) => { Console.Write(nd.Data); }); Console.WriteLine(); Console.WriteLine(SSCLCLTR.EvaluateExpTreeP2(exptree)); Console.WriteLine(SSCLCLTR.EvaluateExpTreeP(exptree)); //EvaluateExpTreeP에 의해서 exptree가 수정되기 때문에 P 쓰고 P2 쓰면 에러가 났던 것. //exptree가 수정되지 않는 EvaluateExpTreeP를 생각해봐야... Console.WriteLine(1 + 3 - (6 - 3 * 7) / 3); }