我们说我有不平衡的二叉树数据结构。在init()之后,我将变量Node * root设置为NULL
我的一种方法是尝试在树中插入节点
bool insertNode(Node ** currentNode, const string & key, int val)
{
Node* newNode;
if (*currentNode == NULL)
{
newNode = newNode(key,val);
*currentNode = newNode;
if(root==NULL) root = newNode;
return true;
}
if (key<*currentNode->getKey())
{
insertNode((Node **)&(*currentNode)->getLeft(), key, val); //error
}
if (key>*currentNode->getKey())
{
insertNode((Node **)&(*currentNode)->getRight(), key, val); //error
}
return false;
}
Node* getRoot() { return root; }
它被称为
insertNode((Node **)&(tree.getRoot())); //error
不幸的编译器给了我错误
error: lvalue required as unary ‘&’ operand|
如果我像这样调用带变量Node* node
的fce insertNode
Node* node = tree.getRoot();
insertNode((Node **)&node); //no error
没有错误。
你能解释一下为什么吗?
编辑: 在ravi的回答之后,我意识到我只更改了地址副本。
要解决这个问题我改变了fce
Node** getRoot() { return &root; }
Node
的成员方法Node** getLeft()
{
return &m_left;
}
Node** getRight()
{
return &m_right;
}
答案 0 :(得分:1)
insertNode((Node **)&(tree.getRoot()));
这是因为你不能使用返回内置类型的函数的返回值作为l值。