大家都知道,表达式树前序遍历得到前缀表达式,中序遍历得到中缀表达式,后序遍历得到后缀表达式,
那么,如何根据最常见的中缀表达式画出表达式的树形结构图呢?
步骤1:求出中缀表达式对应的后缀表达式
步骤2:根据后缀表达式画图
我们一次一个符号地读入后缀表达式。如果符号是操作数,那么就建立一个单结点树并将它的指针推入栈中。如果符号是操作符,那么就从栈中弹出两棵树T1和T2(假设T1先弹出)并形成一棵新的树,该树的根就是操作符,它的左、右儿子分别是T2和T1。然后将指向这颗树的指针压入栈中。
下面来看一个例子。设转换后的后缀表达式输入为ab+cde+**
前两个符号是操作数,因此创建两棵单结点树并将指向它们的指针压入栈中。
接着,"+"被读入,因此指向两棵树的指针被弹出,形成一棵新的树,并将指向它的指针压入栈中。
然后,c,d和e被读入,在单个结点树创建后,指向对应的树的指针被压入栈中。
接下来读入"+"号,因此两棵树合并。
继续进行,读入"*"号,因此,弹出两棵树的指针合并形成一棵新的树,"*"号是它的根。
最后,读入一个符号,两棵树合并,而指向最后的树的指针被留在栈中。