2017-08-16 8 views
0

このコードを書いて、要素をバイナリツリーに追加しました。次の図に示すとおりです。BST要素を追加しない

typedef struct node{ 
    int key; 
    node *right; 
    node *left; 
}*nodePtr; 

nodePtr root = NULL // As global variable. 

void addElement(int key, nodePtr tempRoot){ 
    if(tempRoot!=NULL){ 
     if(tempRoot->key > key){ 
      if(tempRoot->left!=NULL) 
       addElement(key, tempRoot->left); 
      else 
       tempRoot->left = createLeaf(key); 
     } 
     else if(tempRoot->key < key){ 
      if(tempRoot->right!=NULL) 
       addElement(key, tempRoot->right); 
      else 
       tempRoot->right = createLeaf(key); 
     } 
    }else if(tempRoot==NULL) 
     tempRoot = createLeaf(key); 
} 

int main(){ 
    int arr[] = {50,45,23,10,8,1,2,54,6,7,76,78,90,100,52,87,67,69,80,90}; 

    for(int i=0; i<20; i++){ 
     addElement(arr[i], root); 
    } 

    return 0; 
} 

このコードは、ツリーを印刷しようとすると、このコードはツリーに何も追加しません。しかし、代わりにこのコードでコードの最後の部分を置き換えた場合、

else if(root==NULL) 
     root = createLeaf(key); 

どうしてですか?

答えて

5

tempRootを値で受け取るので、関数内で変更すると外部に反映されません。また、グローバルrootに直接アクセスすると、関数内の値を変更することができます。

void addElement(int key, nodePtr tempRoot){ 

参照はここで使用できます。

void addElement(int key, nodePtr &tempRoot) 
関連する問題