递归拥有两个阶段分别是递进阶段 归出阶段也就是相当于出入栈。
1、递进阶段
在这个阶段和循环相同,那就是只是循环找到最后的终止条件,这个阶段的代码位置在函数体调用自身之前,在这个阶段也可以进行一些操作,比如修改元素,以及其他一些不对二分搜索树连续性产生破坏的操作。
2、归出阶段
这个阶段相当于再把之前的循环反向执行一边,这个阶段的代码位置在函数体调用自身之后,在这个阶段可以进行一些破坏二分搜索树连续性的操作,同时也可以把递进阶段的操作放到归处阶段。
我把二分搜索树看成两层循环,第一层事ROOT节点本身,第二层是ROOT的左右节点。
根据老师说的首先要确定循环的终止条件。
函数传入的Node节点为空的话就是终止条件,同时函数语义是增加元素,我们要在终止条件里创建一个Node节点并返回。
根据用更小问题的解构建原问题的答案原则,因为终止条件会返回给我们一个新的节点,那么我们的到了这个节点。需要根据这个节点构成原问题的答案,如何构成那就是把这个解挂载到当前节点上。
但是在这里我们遇到了一个问题,如何确认返回的节点是左节点还是右节点?
这个时候我们就需要在函数调用前增加判断。
老师递归我大概能弄懂了,但是究竟什么时候要使用递归我现在很纠结,老师有没有什么这方面的建议。
还有我递归的理解是否有问题。
登录后可查看更多问答,登录/注册