2011-03-04 6 views

답변

0

, 경우에 동안을 변경합니다. 재귀

int secondlargest(node* a) 
{ 
    if(a == null){ 
     // if the first node is already NULL 
     return -1; 
    } 
    if(a->right == NULL){ 
     return a->data; 
    }else{ 
     return secondlargest(a->right); 
    } 
} 

기본 사항 :

  • 이 있어야합니다 기본 케이스
  • 브레이크 다운 문제의 크기 재귀

당신은 반복적 인 방식하려면 : 무엇을 세상에

int secondlargest(node* a) 
{ 
    node* temp = a; 
    int data = -1; 
    while(temp != null){ 
     data = temp->data; 
     temp = temp->right; 
    } 
    return data; 
} 
+0

일반적으로 메서드를 호출하기 전에 a == null을 테스트하면 메서드가 더 깨끗해지고 이후의 호출에서이 테스트가 항상 실패한다는 것을 알게됩니다. –

+0

그래, 내 실수있어. 감사! – Ava

1

실수로 재귀 적이기 때문에 잠시 사용하지 말고 대신 함수를 반환 하시겠습니까? 마지막 회원의 데이터? 그것은 다음과 같이해야하므로 경우 :

당신은 재귀 버전을 주장하는 경우
int secondlargest(struct node* a) { 
    if(a == NULL) return -1; 
    secondlargestr(a); 
} 

int secondlargestr(struct node* a) { 
    if(a->right!=NULL) return secondlargest(a->right); 
    return (a->data); 
} 
+0

을 큰 실수 : (고마워!) – Ava

+0

@vartika 아무 문제 없어! –