2017-08-16 43 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)