2016-11-19 3 views
0

노드의 rignt 하위 트리에서 가장 작은 숫자를 찾고 싶습니다.이 코드는 솔루션이라고 생각하지만 제대로 작동하지 않습니다. 이 코드의 문제점은 무엇입니까?오른쪽 하위 트리에서 가장 작은 숫자를 찾는 방법

int small; // Where the smallest value is stored 

int smallest(Node n) 
{ 
    if(n.info < small && aux != 0) small = n.info; 
    if(aux == 0) 
    { 
     aux = 1; 
     small = n.dir.info; 
     if(n!=NULL && n.dir!=NULL) return smallest(n.dir); 
    } 
    else{ 
     if(n.dir != NULL) return smallest(n.dir); 
     if(n.esq != NULL) return smallest(n.esq); 
    } 
    return small; 
} 
+0

'small'은 무엇이며 어디에 선언되어 있습니까? – templatetypedef

+0

나는 그것이 일반 트리에서 가장 작은 것을 찾는 것과 같지만, 그 함수에 루트를 전달하는 대신 오른쪽 서브 트리를 전달한다. – Copperfield

답변

1

나는

그냥 기능 작은 (n.right)를 호출 왼쪽 하위 트리 포인터에 적합한 하위 트리 포인터 및 n.left에 대한 n.right를 사용하고 있습니다; 가장 작은 것은 이진 트리에서 가장 작은 값을 찾을 수있는 함수입니다.

int smallest(Node n){ 
    if(n==NULL) return INF; // replace INF with the maximum value that int can hold in your system like 2147483647 
    int left_small = smallest(n.left); // smallest value in left subtree 
    int right_small = smallest(n.right); // smallest value in right subtree 
    int ans = n.info; 
    if(left_small < ans) ans = left_small; 
    if(right_small < ans) ans = right_small; 
    return ans; 
} 
관련 문제