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