2011-03-02 2 views
1

이 글은 숙제이지만 코드와 관련된 도움을 요청하지는 않습니다.나무 + 파이썬의 재귀 문제

나는이 이상한 문제가 있습니다. 나는 BTREE 삭제를 구현하기 위해 노력하고 일부 재귀 반환 문제

def delete (tree , node , value) : 
    if node.leaf == True: 
      # delete value from node 
      return tree 

    elif node.leaf == False and value in node: 
      # do other stuff 

    else : 
      delete(tree,node.Child,value) 
      #recurse till you find leaf node 

여기 내 전체 코드를 게시 할 수 없기 때문에이 그냥 의사 코드를 데. 문제가 오는 것은

이라고 쓸 때 delete(Tree,Tree.root,value) 처음으로 반복 실행되고 리프 노드 부분을 실행하지만 None 값을 반환합니다.

나는 모든 것을 체크 아웃하고 심지어 return tree 진술 바로 위에 인쇄물을 인쇄했으며 거기까지 약간의 가치가있는 나무로 괜찮습니다.

이 사람이 .... 나는이 재귀 함수에서 잘못하고있는 무슨

고마워요 ..

+3

'node.leaf = False' 그늘이 보입니다. 이러한 잠재적 인 오타를 피하기 위해'if node.leaf' /'not node.leaf'를 사용해야합니다. – ide

+0

작동 가능한 실행 가능한 코드를 붙여 넣지 않으면 문제가있는 곳을 말하기 어렵습니다. – tokland

+0

또한,'elif'에서'node.leaf == False' 체크는 중복됩니다. 이것은 첫 번째'if' 체크로 인해 암시 적입니다. 즉'node :'에 'elif value'라고 써주십시오. –

답변

0

빠른 추측을 말해을 고칠 수 :

... 
else: 
     return delete(tree,node.Child,value) # you missed the return here 
... 

을 그리고 나는 에 모두 노드에 속한 자식들만 되풀이해야한다고 생각합니다. 둘 중 하나 일 수도 있습니다.

+0

Yups .. 고맙습니다. .. :) –