首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-06 
关于递归和函数返回值的一个问题下面一段代码:C/C++ code//返回父亲结点void *parent(NODE *&pNode,NODE *

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

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; //找不到节点。} 

热点排行