表达式树的构建与计算(Expression Trees)

2018-11-21-21:52:29

1.构建表达式树

    ① 算法描述:

       遍历后缀表达式,如果符号是Operand,那么我们就建立一个单结点树并将一个指向他的指针推入栈中,如果符号是Operator,那么我们就从栈中弹出指向两棵树T1和T2的那两个指针(T1的先弹出)并形成一颗新

    的树,该树的根就是Operator,他的左右儿子分别指向T2和T1,然后将指向这颗新树的指针压入栈中。

    ② 代码:

 1 BiTree ConstructingExpressionTree(string Expression) {
 2     stack<BiTree>Operand;
 3     for(int i = 0; i < Expression.length(); i++) {
 4         BiTree Child;
 5         if(!IsOperator(Expression[i])) {
 6             Child = new BiNode;
 7             Child->Elem = Expression[i];
 8             Child->Right_Child = NULL;//Operand一定是叶结点
 9             Child->Left_Child = NULL;
10             Operand.push(Child);
11         }
12         if(IsOperator(Expression[i])) {
13             Child = new BiNode;
14             Child->Elem = Expression[i];
15             Child->Right_Child = Operand.top();
16             Operand.pop();
17             Child->Left_Child = Operand.top();
18             Operand.pop();
19             Operand.push(Child);//将构造好的子表达式树的结点压入栈,便于最后汇入总表达式树
20         }
21     }
22     return Operand.top();
23 }
24 
25 bool IsOperator(char Elem) {
26     return (Elem == '+' || Elem == '-' || Elem == '*' || Elem == '/');
27 }

猜你喜欢

转载自www.cnblogs.com/bianjunting/p/9992830.html