C递归时返回值的问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 06:13:20
struct BiTree *insert(struct BiTree *head, int data)//插入元素
{
if (head == NULL)
{
struct BiTree *p;
p = (struct BiTree *)malloc(LEN);
p->data = data;
p->LeftChild = NULL;
p->RightChild = NULL;
amount++;
printf("Insert Successfully");
printf("%d\n",p);
return(p);
}
else if(data < head->data)
head->LeftChild = insert(head->LeftChild, data);//递归
else if(data > head->data)
head->RightChild = insert(head->RightChild, data);//递归
else
printf("The Key Is Exist");
return(head);
}
多次递归后return(p)的值返回给谁了?
上面的函数是由search(head, data);调用的

head->LeftChild = insert(head->LeftChild, data);//递归

return(p)返回的是调用insert的结果啊,就是插入节点的位置,
就把p返回给head->LeftChild啦!

递归是个链式结构,每次如果没有到达递归结束条件就继续向下推进一步,直到到达递归结束条件。每次递归调用都要记住调用点,当返回的时侯从这个调用点继续往下执行。