2017-10-21 1 views
0

데이터 및 오른쪽 및 왼쪽 노드에 대한 문자열 값으로 구현 된 일반 이진 검색 트리가 있습니다. 나무가 잘 작동하지만 내 rankOf 기능에 문제가 있습니다. 재귀를 사용하여 노드를 찾고 요소가 존재할 때 메서드가 성공적이지만 존재하지 않는 값이 작동하지 않을 때이 작업을 돕기 위해 부울을 설정하는 방법을 알 수 없습니다. 여기에 코드입니다 :Java BST 재귀 변수 설정

private int rankOf(String s, Node n){ 
    if (n != null){ 

     //check root 
     if (s.compareTo(n.value) == 0){ 
      if (n.left != null){ 
       return size(n.left); 
      } 
      return 0; 
     } 
     // only worry about left tree, easy 
     if (s.compareTo(n.value) < 0){ 
      return rankOf(s, n.left); 
     } else { 
      // must count entire left tree plus root node 
      return rankOf(s, n.right) + size(n.left) + 1; 
     } 

    } 
    //null or not found 
    return 0; 
} 

루트가 나는 요소가 그래서 뭔가 거기에 이동하지만,이 문제를 처리하는 방법을 확실해야 트리에 알고있는 값과 같습니다.

+0

"존재하지 않는 값이 작동하지 않는 경우"예외가 발생합니까? pls 당신의 나무를 게시하십시오 – CodeIsLife

+0

'''''''''''''method가 무엇을 반환합니까? 성공/실패의 경우에도 메소드가 리턴해야하는 것은 무엇입니까? –

+0

@SchiduLuca Size는 전달 된 노드의 하위 트리에있는 노드의 양을 반환합니다. 실패하면 -1을 반환 할 수 있습니다. –

답변

1

이 검사는 쓸모가 :

if (n.left != null){ 
    return size(n.left); 
} 

어쨌든, 당신은 같은 것을 할 수 있습니다

static int rankOf(String s, Node root) { 
    if(root == null) { 
     return -1; 
    } 

    if(root.value.equals(s)) { 
     return size(root); 
    } 

    int result; 
    if(s.compareTo(root.value) > 0) { 
     result = rankOf(s, root.right); 
    } else { 
     result = rankOf(s, root.left); 
    } 
    return result; 
} 

그리고 당신의 size() 방법 : 경우

static int size(Node root) { 
    if(root == null) return 0; 
    return size(root.left) + size(root.right) + 1; 
} 

String가 아닌 찾았다면 -1이 반환됩니다.