无法从二叉搜索树

时间:2017-09-22 17:12:07

标签: c++ binary-tree nodes

我从二叉搜索树BST中创建了一个叶子的delete_node()函数。以下是delete_node()函数的行为:

  1. 如果二进制搜索树为空,则会通知您它是空的。
  2. 否则,如果该叶子没有孩子,则不需要进一步授权。因此,指向该叶子的指针将被删除,然后使其指向null。但遗憾的是该计划已经崩溃 这是delete_node()函数:

    void  BinarySearchTree :: delete_node(float deleted_key)
    {
      Node* deleted_node_address = return_node_address(deleted_key);
    
      if(root == NULL) cout<<"The tree is empty, No thing to delete\n";
    
      else if(deleted_node_address->left_ptr==NULL  &&  deleted_node_address->right_ptr==NULL)
      {
        cout<<"The element has no children, No linking required\n";
        delete deleted_node_address;
        deleted_node_address = NULL;
      }
    }
    
  3. 以下是return_node_address功能:

    Node* BinarySearchTree  ::return_node_address(float req_key,Node *traverse_ptr)
    {
        if(traverse_ptr==NULL)
        {
            cout<<"There is no data to return its addres";
            return NULL;
        }
        else if(traverse_ptr->key  ==  req_key)
        {
            return traverse_ptr;
        }
        else if(req_key  <  traverse_ptr->key  && traverse_ptr->left_ptr != NULL)
        {
            return_node_address(req_key, traverse_ptr->left_ptr );
        }
        else if(req_key  >  traverse_ptr->key  && traverse_ptr->right_ptr!= NULL)
        {
            return_node_address(req_key, traverse_ptr->right_ptr);
        }
        else
        {
            cout<<"The Key You Entred Is Not Found in The Tree";
            return NULL;
        }
    
    }
    

1 个答案:

答案 0 :(得分:1)

作业

deleted_node_address=NULL;

清除deleted_node_address变量,该变量是BinarySearchTree :: delete_node(float deleted_key)函数的本地变量,但从其父节点清除指向已删除节点的指针。

结果你使你的树无效:它保留了一些left_ptr或一些right_ptr不是-NULL但指向一个非对象。因此,下次尝试访问指向的未使用内存时可能会崩溃。

此外,您调用return_node_address()功能搜索节点以删除之前

root==NULL。您确定return_node_address方法是否为NULL-root-proof ...?