2017-08-16 76 views
0
Node * BST::insert_real(int key, Node *& node) 
{ 
    if (node == nullptr) 
     return node = new Node(key); 

    if (key < node->key) 
     return insert_real(key, node->left); 
    else if (key > node->key) 
     return insert_real(key, node->right); 
    else 
     return nullptr; 
} 

Node * BST::insert(int key) 
{ 
    return insert_real(key, header->left); 
} 

BinarySearchTree,插入函數。C++參考類型爲遞歸函數參數

如果key總是過得left,當函數insert_all()運行到位置node = new Node(key),是否node相當於header->left->left->left->left->left->......->left->left

如果上面我的猜測是正確的,代碼header->left->left->left->left->left->......->left->left會帶來一定的負擔。(如果是的話,我將取代Node*&Node**


我上面說的是正確的話?

回答

0

如果鍵總是向左移動,當函數insert_all()運行到位置node = new Node(key)時,該節點是否等同於header-> left-> left-> left-> left - >左轉 - > ......->左>左

不,在下面叫你不改變node參數,您received.You只是與其他一些參數調用insert_real()

return insert_real(key, node->left); 

你改變node唯一一次低於

if (node == nullptr) 
    return node = new Node(key);