2012-11-19 5 views
2

이것은 BST에서 ceilfloor을 찾는 코드입니다. 데이터를 삽입하려고 할 때. 삽입 호출이 첫 번째 조건으로 갈 때마다 즉 포인터를 건네도. 이 값은 main 함수에서 업데이트되지 않습니다. 어떤 사람이 왜 그런지 말해 줄 수 있습니까?루트 값이 업데이트되지 않는 이유

using namespace std; 

struct Node 
{ 
    int key; 
    struct Node* right; 
    struct Node* left; 
}; 

struct Node* newNode(int key) 
{ 
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); 
    newNode->right = NULL; 
    newNode->left = NULL; 
    newNode->key = key; 
    return newNode; 
} 


void insert(struct Node** root,int key) { 
    if((*root) == NULL){ 
     (*root)= newNode(key); 
     cout<<"entered first if condition"<<endl; 
    } 
    else if((*root)->key <= key) 
     insert(&((*root)->left),key); 
    else 
     insert (&((*root)->right),key); 
} 

int ceil(struct Node* root , int input) 
{ 
    if (root == NULL) 
    return -1; 
    if(root->key == input) 
    return root->key; 
    if(root->key < input) 
    return ceil(root->right , input); 
    else{ 
    int ceilnum = ceil(root->left, input); 
    return (ceilnum >= input) ? ceilnum : root->key; 
    } 
} 

int main() 
{ 
    int size, temp, ceilfor; 
    struct Node* root = NULL; 
    cout<< "size" << endl; 
    cin >> size; 
    for(int i = 0; i< size; i++) 
    { 
    cin >> temp; 
    insert(&root,temp); 
    } 
    cout<< root->key; 
    cout<< root->left->key; 
    cout << root->right->key; 
    cout << "ceil for" << endl; 
    cin >> ceilfor; 
    cout<< ceil(root, ceilfor) <<endl; 
} 
+0

'main'과'insert' 함수 모두에서'root'의 값을 출력 해 줄 수 있습니까? –

답변

2

이것은 (직접 또는 간접적으로 재귀 호출을 통해) 첫 번째 조건이되어야합니다.

실제 삽입은 첫 번째 if 블록에서만 발생하며 다른 블록은 첫 번째 if 블록에 재귀 적으로 도달합니다.

관련 문제