做完简单题LeetCode-剑指offer-06-从头到尾打印链表,画图写博客总结的时候,发现尾递归的操作,如果刚好和正向调用的操作相反的话,其实就是一个简单的回溯过程了。在此记录一下,方便后续思路的延伸~
本博客内容也写在lc题解上了:简单理解递归操作 | 顺带理解一下回溯过程~
本人偶尔也会会写写题解的OvO,哈哈哈~
正向过程:如果执行操作在递归之前,则在每个正向调用的过程中都执行一遍。
list.add(head.val); // 操作
recur(head.next); // 递归调用
剑指offer-06-从头打印链表01回调过程:但是,如果执行操作在递归之后,就会在最终的递归出口处开始,继续执行没有执行完的操作!有那味道没!哈哈哈
recur(head.next); // 递归调用
list.add(head.val); // 操作
那回溯是什么呢?
就是在回调过程中,把之前正向调用的操作给撤销了。这样子就可以恢复到那个节点上的初始状态,还原现场。
list.add(head.val); // 操作
recur(head.next); // 递归调用
list.remove(list.size() - 1); // 撤销操作