2017-03-23 15 views
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의 깊이

+0

'나무의 크기는'무엇입니까? 일반적으로 같은 값으로 mintreesize 및 maxtreesize를 초기화하면 안됩니다. – Jett

+0

내가 트리 크기라고 부르는 것은 트리의 깊이입니다. –

+0

mittreesize와 maxtreesize는 나무가 '측정'되지 않았기 때문에 같은 값으로 초기화됩니다. –

답변

3

트리 깊이를 계산하는 식을 평가 비슷하지만 운영자는 결과 값의 결과 깊이를 대신 계산 :

def getRPNdepth(expression): 
    stack = [] 
    for val in expression: 
     if val in ['-', '+', '*', '/']: 
      stack.append(max(stack.pop(),stack.pop())+1) 
     else: 
      stack.append(1) 
    return stack.pop() 
+0

당신은 50 점을받을 가치가 있습니다! –

0

글쎄, 그냥 'cheating'을 조금 했어. 같은 목표를 달성하기 위해 변환기를 중첩하는 데 RP를 사용했는데, 누군가 필요한 경우 여기에 게시한다.

def getRPNdepth(expression): 
    tmpexp = expression 
    tmpfmla = [1 if n[0] == 'x' else n for n in tmpexp] 
    stack = [] 
    for val in tmpfmla: 
     if val!=' ': 
      if val in ['-', '+', '*', '/']: 
       op1 = stack.pop() 
       op2 = stack.pop() 
       stack.append('(' + str(op1) + str(val) + str(op2) + ')') 
      else: 
       stack.append(str(val)) 

    openparentesiscount=0 
    maxopenparentesiscount = 0 

    onlyparentesis='' 
    for c in stack[0]: 
     if c in ['(', ')']: 
      onlyparentesis=onlyparentesis+c 
      if c=='(': 
       openparentesiscount=openparentesiscount+1 
      else: 
       openparentesiscount = openparentesiscount - 1 
     if openparentesiscount>maxopenparentesiscount: 
      maxopenparentesiscount=openparentesiscount 

    return maxopenparentesiscount 

감사합니다.