git代码地址:https://github.com/sabersana/try/blob/master/sizeyunsuan1.py

随机位数的四则运算 随笔 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

上篇内容:https://www.cnblogs.com/sabersana/p/10573558.html

随机位数的四则运算可以先给定一个大树(最大数字为8为数字的计算)

    a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 = [tree(random.randint(0, 3)) for j in range(15)]
    a0.left, a0.right = a1, a2
    a1.left, a1.right = a3, a4
    a2.left, a2.right = a5, a6
    a3.left, a3.right = a7, a8
    a4.left, a4.right = a9, a10
    a5.left, a5.right = a11, a12
    a6.left, a6.right = a13, a14

形状如图

        0

    1          2

  3    4      5     6

7   8    9     10   11   12  13     14

这次需要控制0, 1, 2节点的运算符即可

    a0.data = random.randint(0, 1)  # 控制 01 节点的数值,使后序遍历变成逆波兰式
    a1.data = random.randint(0, 1)
    a2.data = random.randint(0, 1)

偷懒直接在树中加入了是否为头结点的head变量,0否1是

class tree():
    def __init__(self, data=None, left=None, right=None): self.data = data self.left = left self.right = right self.head = 0
a0.head = 1

然后进行一次树的遍历,除头节点外每个节点都有概率(0.5)成为叶子(最少两位数字的计算)

def shengchengshu(a):  # 生成树
    if a.left != None:
        p = random.uniform(0, 1)
        if p < 0.5 and a.head == 0:
            a.left = None
            a.right = None
        else:
            shengchengshu(a.left)
            shengchengshu(a.right)

运行结果如图

随机位数的四则运算 随笔 第2张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄