【思路整理】小白如何写递归

思想来自力扣101题中大佬的热评,链接在文末附上。

为什么写不出来是因为找不到递归的点,怎么找递归的点。

举例:

1判读一棵树是否对称
思路:
(1)首先如果是空树,肯定对称。不是的话对称需要比较左树和右树
(2)左树的左孩子与右树的右孩子相等,左树的右孩子与右树的左孩子相等则对称。如何比较左孩子和右孩子是否相等……
这里,递归的点就出来了,就是实现一个函数A需要用到A实现之后的功能。
要判断两树是否相同,要通过他们的孩子是否相同来判断。

递归点出现之后,立马动手按照递归思路写代码:
树为空,对称
不为空,通过函数A判断左右子树是否相同。
A(左子树,右子树)
def A(左子树,右子树){
左右树的值相同且左树左孩子与右树左孩子相同且左树右孩子与右树左孩子相同则树对称

if (左右树的值&&A(左孩子,右树左孩子)&&A(左树右孩子,右树左孩子)){对称}}
记得还要加上null情况判别
代码:

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if (root==null){
            return true;
        }
        return symmetric(root.left,root.right);


    }
    public boolean symmetric(TreeNode left,TreeNode right){
        if(left==null&&right==null){
            return true;
        }
        //因为两个都是null已经在上一步判断过了,所以直接或就可以,
        if(left==null || right == null){
            return false;
        }
        // if((left==null&&right==null)&&(left==null || right == null)){
        //     return false;
        // }
        if(left.val==right.val&&symmetric(left.left,right.right)&&symmetric(left.right,right.left)){
            return true;
        }else{
            return false;}
        
    }
}
复制代码

2、求一棵树的最大深度

逻辑:(1)如果树为null,深度为0
(2)树不为空,求树的最大深度就是:左右子树的最大深度+1,求左右树的最大深度又是其子树的最大深度加一

递归点出来了,动手写

def 深度(树)
{最大深度=max(左子树最大深度,右子树最大深度)+1}
就是defA (){
return Math.max(A(左子树),A(右子树))+1
}
然后加上null条件判断。

class Solution {
    public int maxDepth(TreeNode root) {
        int num=0;
        num = depth(root,num);
        return num;
        }


    
    public int depth(TreeNode root,int num){
        if(root==null){
            return 0;
        }
        num=Math.max(depth(root.left,num),depth(root.right,num))+1;
        return num;
    }
}
复制代码

大佬思想:leetcode-cn.com/problems/sy…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享