C++ conference of pointer

  //cannot bind non-const lvalue reference of type 



    class binary_tree_node
    {
      public:
        binary_tree_node(double data=0, binary_tree_node* left_link = NULL, binary_tree_node* right_link = NULL)
        {
          data_field = data;
          left = left_link;
          right = right_link;
        }
        double get_data() {return data_field;}
        binary_tree_node* get_left(){return left;}
        binary_tree_node* get_right(){return right;}
        bool is_leaf() {return (left==NULL && right==NULL);}


      private:
        double data_field;
        binary_tree_node* left;
        binary_tree_node* right;
    };

    // delete a tree
    void tree_clear(binary_tree_node* root_ptr)
    {
      if (root_ptr != NULL)  
      {
        tree_clear(root_ptr->get_left());
        tree_clear(root_ptr->get_right());
        delete root_ptr;
        root_ptr = NULL;
      }
    }


// delete a tree: the difference parameter by reference, it will not compile, //why?
// solution.cpp:589:34: error: cannot bind non-const lvalue reference of type //‘binary_tree_node*&’ to an rvalue of type ‘binary_tree_node*’
//     tree_clear(root_ptr->get_left());

void tree_clear(binary_tree_node* &root_ptr)
    {
      if (root_ptr != NULL)  
      {
        tree_clear(root_ptr->get_left());
        tree_clear(root_ptr->get_right());
        delete root_ptr;
        root_ptr = NULL;
      }
    }

Why this will not work once i change the function by reference. The error message is the following: solution.cpp:589:34: error: cannot bind non-const lvalue reference of type ‘binary_tree_node*&’ to an rvalue of type ‘binary_tree_node*’. Can anybody explain?