广义表递归问题!!!
来源:百度知道 编辑:UC知道 时间:2024/05/26 14:32:28
好比遍历,插入,广义表 让我不知不知所措
谢谢二楼和三楼 你们的答案都对我有很大的帮助 已经成功写出来了 谢谢你们 但只能选一个 所以只能投票决定了 不好意思了。。。。。
看到你已经对广义表有了了解,那么以经典的(前序)遍历二叉树为例,说说我对递归思路的理解吧。
(为了说得更清楚,不考虑算法是否高效编码是否简明等问题)
递归的总体思路是只考虑目前我们需要解决的问题,剩下的都交给函数去处理
1、确定总体思路,那么前序遍历二叉树的总体思路是什么?
1st 先对根节点数据域操作(需要解决的)
2nd 操作根节点的左子树数据域(交给函数解决的)
3rd 最后操作根节点右子树数据域(交给函数解决的)
4th 对每个根节点都这样操作(交给函数解决的)
2、确定错误和最低层的返回条件
这里我们设定为
if(root == NULL)
{
return FALSE;
}
3、构建函数(我们只把目前需要解决的问题搞定就ok了,剩下的交给函数自己去处理)
int view(TREENODE *root)
{
if(root == NULL)
{
return FALSE;
}
else
{
execute(root->data);
}
/*目前考虑的是1、判定错误 2、操作根节点数据域*/
view(root->left);
view(root->right);
/*左右子树数据域操作不是我们目前“急需”解决的,交给函数完成*/
return OK;
}
这样就完成前序遍历二叉树函数的构建。
希望对你有帮助吧。
比如你在写一个递归函数fun1(),里面当然要用到fun1(),此处不好理解时你不妨假想已经存在一个函数fun2(),你只管调用它就好了,这样到你完成fun1()函数的编写时,再将其中的fun2()改为fun1()即可。这样应该容易理解些,在理解时不必一层一层往里套着想。
递归函数经常与选择语句配合着使用,多做一些练习,从简单的慢慢来,
学习程序需要的是冷静与耐心<