读书人

关于递归和函数返回值的一个有关问题

发布时间: 2012-03-06 20:47:55 作者: rapoo

关于递归和函数返回值的一个问题
下面一段代码:

C/C++ code
//返回父亲结点  void *parent(NODE *&pNode,NODE *&p,NODE *head){    if(head!=NULL)    {        if(head->pLeft==pNode || head->pRight==pNode)        {            p=head;            return p; //问:为什么这里必须要返回一个指针?        }                if(head->pLeft!=NULL)            parent(pNode,p,head->pLeft);            if(head->pRight!=NULL)            parent(pNode,p,head->pRight);    }}

这个parent函数没有返回值,但是如果我把return p去掉就会报错,错误信息是编译器需要一个返回值。如果您知道原因,请告诉小弟我,非常感谢。

[解决办法]
void *parent(NODE *&pNode,NODE *&p,NODE *head)//把这个地方的*号去掉改成下面的,声明的地方也改
void parent(NODE *&pNode,NODE *&p,NODE *head)
[解决办法]
void *parent

void *为无类型指针,
[解决办法]
你的函数类型是空型指针
[解决办法]
C/C++ code
        if(head->pLeft!=NULL)            return parent(pNode,p,head->pLeft);            if(head->pRight!=NULL)            return parent(pNode,p,head->pRight);
[解决办法]
C/C++ code
//返回父亲结点  void *parent(NODE *&pNode, NODE *head){    void *ret = NULL;    if(head==NULL || pNode==NULL)  //边界1 叶子节点 or pNode参数不对    {        return ret;    }    //这里不知道你为什么这么做,如果你确定比较的是他们的地址。    if(head->pLeft==pNode || head->pRight==pNode) //边界2 找到节点    {        return (void *)head;    }    if(head->pLeft != NULL) {        ret = parent(pNode,p,head->pLeft);        if(ret != NULL) { //找到节点直接返回剩下的不搜。             return ret;        }     }     if(head->pRight!=NULL) {        ret = parent(pNode,p,head->pRight);        if(ret != NULL) { //找到节点直接返回剩下的不搜。             return ret;        }     }    return ret; //找不到节点。} 

读书人网 >C语言

热点推荐