Git代码地址:https://github.com/sabersana/try/blob/master/sizeyunsuan.py
解题思路:
一开始看到题目感觉很简单一个循环三个随机数但随着思考发现题目没有这么简单,被限制住计算位数和最后求解,如1+2*3,转化为逆波兰式很麻烦
百度搜索时发现可以用二叉树生成式子就打算试一试(https://www.cnblogs.com/xiaobingqianrui/p/8894253.html)。
逆波兰式:https://baike.baidu.com/item/%E9%80%86%E6%B3%A2%E5%85%B0%E5%BC%8F/128437?fr=aladdin
在一棵没有单叶子的树中叶子永远比双亲多1个节点,刚好和一个运算式子中的数字符号吻合,可以得知叶子节点全为进行运算的数字,和其余节点全为运算符号
树中序遍历时可以输出一个运算式子,后序遍历时可以得到这个式子的逆波兰式
设计实现:
需要一个树类
方法有 初始化树 , 中序遍历, 后序遍历, 计算逆波兰式
在初始化树时规定树中非叶子节点的运算符号以及叶子节点的具体数字
中序遍历时将结果保存起来可得到一个正常运算式子
后序遍历得到这棵树代表的式子的逆波兰式
以及最后根据逆波兰式进行计算
代码说明:
决定用树解决问题之后就首先得学会用python建立一棵树 https://blog.csdn.net/yunlongl/article/det