2014-08-30 2 views
0
public int count(Vertex T, int start, int end, int count) { 

     if (T == null) { 
      return -1; 
     } 

     count(T.left,start,end,count); 
     int test=T.key; 
     if(test >=start && testKey<end){ 
      count++; 
     } 

     System.out.print(T.key+"#"+count+"# ");     
     count(T.right,start,end,count); 

     return count; 
    } 

자기가 작성한 균형 검색 트리에서 시작 번호보다 크고 내 끝 번호보다 작은 숫자를 얻으려고합니다. .재귀 AVL 트리에있는 숫자 계산하기

지금까지 내 밸런싱 검색 트리가 정확합니다. 지금 내가 가진 유일한 문제는 정확히 카운트를 반환하는 것입니다. 위의 코드에서 내 범위와 일치하는 숫자가 올바르게 계산되지만이 문제는 재귀 함수의 특성으로 인해 0으로 반환되므로 필요한 개수를 반환 할 수 없다는 문제가 확인되었습니다. 요구.

원하는 수를 반환하는 제안을 얻을 수 있다면 도움이됩니다.

+0

메서드 및 매개 변수 (또는 다른 변수)에 동일한 이름을 사용하지 마십시오. 이것은 끔찍하게 혼란 스러울 것입니다. –

답변

1

count 메서드는 방금 무시한 값을 반환합니다.

count을 매개 변수로 전달하려고합니다. 자바가 값을 사용하여 호출하므로이 기능이 작동하지 않습니다. 매개 변수를 통해 결과를 반환하지 않습니다.

대신에 숫자를 추가하고 count 매개 변수를 제거 (대신 로컬 변수로 지정)하고 싶습니다. 예를 들어 노드가있는 경우

count += count(T.left,start,end); 

null 당신은 0 대신 -1을 반환해야합니다.

또한 문제를 해결하는 데 필요한 것보다 많은 작업을 수행하고 있습니다. 예를 들어 < start 노드에 도달하면 왼쪽 하위 트리를 계산할 필요가 없으므로 노드의 모든 노드는 start보다 작습니다. 노드가있는 경우 오른쪽 하위 트리와 비슷합니다. >= end

+0

감사합니다. 나는 당신의 도움을 받아야한다고 생각합니다. 나는 더 많은 일을하고 있지만 3 가지 가능한 경우가 있다는 것을 이해한다. 1) 모든 값은 왼쪽에있다. 2) 모든 값은 오른쪽에있다. 3) 루트는 내가 지정한 범위의 중간에있을 수 있고, 그렇게 될 것이다. 양쪽 끝. –

관련 문제