Leetcode二叉树后续遍历系列题总结

本文总结了LeetCode中涉及二叉树遍历的几道经典题目,包括最大路径和、打家劫舍III、二叉树的直径、最长连续序列路径和二叉树的坡度等。每道题目都分析了根节点对结果的影响以及如何为下次递归做出贡献,通过递归算法解决这些问题。
摘要由CSDN通过智能技术生成

这种类型的题写得我头有点疼,总结一下以便复习。

这些题的特点是自底向上进行遍历,左右子树和根节点往往会对结果值有两种影响,一般是包括根节点和不包括根节点的情况,最后求出此树对下一次遍历的影响,直到遍历结束。
总之就是考虑两件事:
1.当前根节点对最终结果有什么影响
2.这次递归能给下次递归做出什么贡献,即给下次递归返回啥

124. 二叉树中的最大路径和

题目链接

题目:
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
在这里插入图片描述
思路:
这道题是求最大路径的节点和,所以定义一个全局变量来保存值。
1.根节点对结果的贡献:当前树的最大路径和为根节点+左子树最大路径和+右子树最大路径和(注意这里左右子树可能为负数,如果为负数则用0替代,表示不取)
2.对下次递归的贡献:因为包括根节点的最大路径只能取一条,所以选取左右子树最大路径和的最大的那支,加上根节点值返回给下次递归。

class Solution {
    int res = Integer.MIN_VALUE;

    public int maxPathSum(TreeNode root) {
        helper(root);
        return res;
    }

    private int helper(TreeNode root) {
        if (root == null) return 0;
        //求出当前根节点的左右子树的路径和
        int left = Math.max(0, helper(root.left));
        int right = Math.max(0, helper(root.right));
        //求出当前的最大路径
        res = Math.max(res, left + right + root.val);
        //给下次递归做贡献
        return Math.max(left, right) + root.val;
    }
}

337. 打家劫舍 III

题目链接

题目:
在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值