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 }