试验总结1 改变递归函数中的执行内容

Posted biankun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试验总结1 改变递归函数中的执行内容相关的知识,希望对你有一定的参考价值。

  在做数据结构慕课《03-树3 Tree Traversals Again》这道题时,我的思路是先构造好树,而后直接用PostOrderTraversal(BinTree BT)进行后序遍历。(这道题目前暂未ac,整体方法有待完善)课上所讲的后序遍历递归实现方法是这样的——

void PostOrderTraversal(BinTree BT)
{
    if(BT){
        PostOrderTraversal(BT->Left);
        PostOrderTraversal(BT->Right);
        printf("%d\n", BT->Data);
    }
}

  不过这样一来就有问题,题目中有明确的输出格式要求(“All the numbers must be separated by exactly one space, and there must be no extra space at the end of the line.”)。如果是循环方式很容易想到在循环中进行判断并执行相应操作,可是递归函数中每次递归都是再进入相同的函数,若是直接在函数中进行标记判断每次进入该函数时标记变量又会被重置,循环中用到的方法很明显是不可行的。于是我想到了用全局变量。

  如下所示,在函数外定义好标志变量count,将PostOrderTraversal(BinTree BT)函数传入值增加一个标志位参数,且该函数最后也要返回改变后的count值。需要注意的是这样一改变之后每次调用该后序遍历函数时必须变成count = PostOrderTraversal(BT->Left, count); 以实现count数据的传送更新。

int count = 1int PostOrderTraversal(BinTree BT, int count)
{
    if(BT){
        count = PostOrderTraversal(BT->Left, count);
        count = PostOrderTraversal(BT->Right, count);
        if(count == 1){
            printf("%d", BT->Data);
            count++;
        }
        else
            printf(" %d", BT->Data);
    }
    return count;
}

   这样就实现了第一个数和之后的数输出格式的不同。

以上是关于试验总结1 改变递归函数中的执行内容的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE 方法的使用

第四周课程总结&试验报告

第五周课程总结&试验报告

bash脚本之函数简单介绍应用及函数的简单递归调用

第五周课程总结&试验报告

20199319 缓冲区溢出漏洞试验