理解二叉树与递归

根据视频:看到递归就晕?带你理解递归的本质!_哔哩哔哩_bilibili内容整理

二叉树与递归:

  1. 如何思考二叉树相关问题?
  2. 为什么需要使用递归?
  3. 为什么这样写就一定能得出正确答案?
  4. 计算机是怎样执行递归的?
  5. 另一种递归思路

二叉树的最大深度为例:

不要一开始就陷入细节,而是思考整棵树和左右子树的关系。
整棵树的最大深度 = max(左子树最大深度,右子树最大深度) + 1

原问题:计算整棵树的最大深度;子问题:计算左/右子树的最大深度;子问题和原问题是相似的。
类比循环,执行的代码也应该是相同的,但子问题需要把计算结果返回给上一级问题,这更适合用递归实现。

由于子问题的规模比原问题小,不断递下去,总会有个尽头,即递归的边界条件(base case)直接返回它的答案(归)。

代码如下:

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int maxleft = maxDepth(root.left);
        int maxright = maxDepth(root.right);
        return 1 + Math.max(maxleft, maxright);
    }
}

另一种递归思路:

class Solution {
    private int ans = 0;

    public int maxDepth(TreeNode root) {
        traversal(root, 0);
        return ans;
    }

    private void traversal(TreeNode root, int cnt) {
        if (root == null) {
            return;
        }
        cnt++;
        ans = Math.max(ans, cnt);
        traversal(root.left, cnt);
        traversal(root.right, cnt);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值