2

これは、BSTでとを見つけるためのコードceilですfloor。データを挿入しようとしているとき。挿入呼び出しが最初のif条件に進むたび。つまり、ポインタを渡しますが。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;
}
4

1 に答える 1

2

最初の状態になる必要があります(直接または再帰呼び出しを介して間接的に)。

実際の挿入は最初のifブロックでのみ発生し、他のブロックは再帰的に最初のifブロックに到達します。

于 2012-11-19T11:54:13.537 に答える