2017-11-19 4 views
1

자바에서는 특정 값 (예 : 정수 값 1)에 대해 전체 이진 트리를 통과하는 부울 메서드를 코딩하는 중입니다. 노드가 그 값인 경우,이 메소드는 true를 리턴합니다.바이너리 트리 : 모든 값이 특정 값과 같으면 TRUE를 반환하는 메서드

public static boolean everything1(IntBTNode root) { 
    if (root.data == 1) { 
     everything1(root.left); 
     return true; 
     everything1(root.right); 
    } 
} 

이 궤도에 나는 건가요 :

지금까지, 나는 다음 있나요?

답변

1

우선 return 문 다음의 모든 코드 행은 실행되지 않습니다. 그래서 조심하세요. 당신이 재귀와 함께 할하려는 경우 둘째, 나는 다음을 추천 : 루트 (노드) null의

public static boolean everything1(IntBTNode root) { 
    if (root == null) { 
     return true; 
    } else { 
     return (root.data == 1) && everything1(node.left) && everything1(root.right) 
    } 
} 
  1. 체크 경우 인 경우, 단지 true을 반환합니다. 값이 왼쪽에있는 경우 루트 데이터가 1이면
  2. 다른
  3. , 당신이 실행 마무리 false을받을 경우 때문에 짧은 &&와 단락, 확인하고, 모든 항목이 1
  4. 체크 반복적으로하는 경우 확인하려면 노드
  5. 체크 값이 바로 노드
+0

실제로는 잘 모르겠다. 처음에 나는 거짓으로 생각하다 –

3

재귀 적 메서드의 논리는 메서드가 수행하는 동작을 모국어로 생각하는 방식을 반영해야합니다. 귀하의 경우에는 다음 조건 모두에 해당하면, 트리의 모든 1입니다 :

  • 노드 자체가 1이며, 왼쪽에
  • 모든 1이며, 오른쪽에
  • 모두가 1

또한 노드 자체가 null 인 경우가 사실입니다. 이는 기본 사례입니다.

재귀 적 메서드 구현을 시작할 때 이미 사용할 수 있다고 상상해보십시오. everything1

public static boolean everything1(IntBTNode node) { 
    return (node == null) 
     || (node.data == 1 && everything1(node.left) && everything1(root.right)); 
} 

재귀 호출 라인 (2) 및 상기 설명에 대응하는 3 : 다음과 같이 따라서, 코드는 기록 될 수있다.

+0

이 아니라 노드가 null의 경우, 그것은 항상 그것을 사실을합니다 반환 것이다 재귀 경우? 어쩌면 (node! = null) && (node.data == 1 ....? –

+0

@DamianLattenero 아니요,'||'를 사용하면 올바른 것입니다. 이렇게하면 프로그램은 절대로 true를 반환하지 않습니다 ' – dasblinkenlight

+0

aaaaah, 지금은 좋은 대답 : D, 심지어 더 짧다. –

2

하지만, · everything1 ·을 호출하기 전에 IntBTNode 노드가 null인지 아닌지를 결정해야한다고 생각합니다.

public static boolean everything1(IntBTNode node, int key) { 
    if(node == null) return true; 
    if(node.data != key){ 
     return false; 
    } 
    return everything1(node.left, key) && everything1(node.right, key); 
} 
+0

잘 했어, 일반적으로 1, 더하기 하나에 대해서도 작동한다. –

관련 문제