一、思路
- 简(kun)单(nan)的递归,递归三要素:
- 确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。参数可以边写边确定。
- 确定终止条件:写完了递归算法,运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。
- 确定单层递归的逻辑:确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。
二、代码(以前序遍历为例)
(递归自己搞还是没想出来,晕的一,看完思路后自己写出来了)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
ret = []
self.returnNode(root, ret)
return ret
def returnNode(self, myNode, ret):
if myNode == None:
return
ret.append(myNode.val) # 1
self.returnNode(myNode.left, ret) # 2
self.returnNode(myNode.right, ret) # 3
中序遍历、后序遍历修改[1,2,3]的顺序即可,中序遍历[2,1,3],后序遍历[2,3,1]。
三、总结
- 递归很早就认识了,但是一直没掌握诀窍,记清三要素:参数and返回值、终止条件、递归逻辑。
- 不过递归用的好像确实很少,掌握即可,别遇到了不会。
部分内容参考代码随想录