私は以下の 'ツリーサイザー'を実装しましたが、特定の条件下で失敗しました。例4はサイズ4を返すときにサイズ2を返します。私はこれを何度も書きましたが、役に立たない、それは失敗し続けます。事前のおかげでRPNツリーサイズを取得
JC
def getRPNdepth(expression):
treesize=0
maxtreesize=treesize
mintreesize=treesize
tmpexp=expression
tmpfmla = [1 if n[0] == 'x' else n for n in tmpexp]
print(tmpfmla)
try:
stack = []
for val in tmpfmla:
if val in ['-', '+', '*', '/']:
op1 = stack.pop()
op2 = stack.pop()
if val == '-': result = op2 - op1
if val == '+': result = op2 + op1
if val == '*': result = op2 * op1
if val == '/':
if op1 == 0:
result = 1
else:
result = op2/op1
stack.append(result)
treesize=treesize+1
else:
stack.append(float(val))
treesize = treesize - 1
if treesize>maxtreesize:
maxtreesize=treesize
if treesize<mintreesize:
mintreesize=treesize
return abs(mintreesize)
except:
print('error validate rpn>' + str(expression))
return 0
xxxx = ['x6', 'x7', '+', 'x7', '+', 'x7', '+', 'x7', '+']
print(getRPNdepth(xxxx))
例のカップル: [ '1'、 '1'、 '+'、 '1'、 '1'、 '+'、 '+'] ['1'、 '1'、 '1'、 '+'、 '+'] はどちらも3の結果を返します。 は、3のときに3を返します。4
まったく、私は知る必要がありますその文字列表現からのRPNの深さ。
「木のサイズは何ですか?一般的には、mintreesizeとmaxtreesizeを同じ値に初期化しないでください。 – Jett
私がツリーサイズと呼ぶものはツリーの深さです。 –
mittreesizeとmaxtreesizeは同じ値に初期化されていますが、ツリーはまだ '測定'されていないため、 –