2013-02-22 7 views
1
나는 BST (이진 검색 트리)를 작성하는 작업 그리고 난 그걸 읽고 있어요 책에서 예를 들어 거기

이 코드를병합 방법 (이진 검색 트리)

public int height() { 
    return height(root); 
} 

private int height(BinaryNode<E> node) { 
    if (node == null) { 
     return 0; 
    } else { 
     int leftHeight = height(node.left); 
     int rightHeight = height(node.right); 

     if (leftHeight < rightHeight) { 
      return 1 + rightHeight; 
     } else { 
      return 1 + leftHeight; 
     } 
    } 
} 

을 제공하지만 설명 정보가 없습니다 두 가지 분리 된 높이 방법이있는 이유에 대해. 따라서이 두 메서드를 하나의 높이 메서드에 병합 할 수 있는지 묻는 중입니다. 가능하지 않은 경우 가능합니까? 왜 안돼?

도움이 될만한 의견이 있으시면 Bob에게 문의하십시오.

답변

1

예 : method overloading입니다.
전달 된 인수 유형의 수에 따라 다른 동일한 이름을 가진 두 개의 메소드가 있습니다.

첫 번째 방법에는 매개 변수가없고 두 번째 매개 변수에는 BinaryNode<E> 매개 변수가 하나 있습니다.
첫 번째 메서드가 호출 될 때 두 번째 메서드를 호출하여 root 변수 (이 변수는 BinaryNode<E>이라고 가정 함)를 호출합니다.

첫 번째도 public이므로 다른 클래스에서 호출 할 수 있으며 두 번째 클래스는 private이며 정의 된 클래스에서만 호출 할 수 있습니다.

1

제공 한 메서드가 트리 클래스의 일부라고 가정하면 어떻게 병합 할 수 있는지 알 수 없습니다. 첫 번째는 인수가 필요하지 않은 공용 메서드이고 두 번째는 주어진 노드의 높이를 확인하는 도우미 재귀 메서드입니다. 첫 번째 메서드는 두 번째 메서드를 사용합니다. 루트 자체에서 도우미 메서드를 호출합니다. 두 번째 방법은 외부에서 볼 수 없으므로 비공개입니다.

높이 방법이 노드 수준에서 구현 된 경우 인수없이 단일 재귀 메서드로 수행 할 수 있습니다.

0

int height() 방법은 공개입니다. 이것은 수업 외에서 부름을받을 것입니다. 그것은 나무의 높이를 결정해야합니다. 그것은 다른 하나를 호출하여 이것을 할 것입니다.

는 어떤 하위 트리의 높이를 결정하기 위해 public int height() 방법으로 만 사용되기 때문에 int height(BinaryNode<E> node)개인 것을 참조하십시오.