如何找到一棵二叉树中的最大路径和

在一棵二叉树中找到最大路径和可以通过递归实现。对于当前节点,最大路径和可能有三种情况:

  • 最大路径和为当前节点的值加上左子树中的最大路径和,右子树中的最大路径和;
  • 最大路径和为当前节点的值加上左子树中的最大路径和;
  • 最大路径和为当前节点的值加上右子树中的最大路径和。

对于每个节点,我们需要计算这三种情况下的最大路径和,并将它们与当前最大路径和比较。
同时,我们需要返回当前节点值加上左子树和右子树中的最大路径和的和,作为向上递归时的结果。

    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        
        public TreeNode(int val) {
            this.val = val;
        }
    }

    class Solution {
        private int maxPathSum = Integer.MIN_VALUE;

        public int maxPathSum(TreeNode root) {
            maxPathSumHelper(root);
            return maxPathSum;
        }    

        private int maxPathSumHelper(TreeNode node) {
            if (node == null) {
                return 0;
            }

            int leftMaxPathSum = maxPathSumHelper(node.left);
            int rightMaxPathSum = maxPathSumHelper(node.right);

            int maxPathSumWithNode = Math.max(node.val, Math.max(node.val + leftMaxPathSum, node.val + rightMaxPathSum));
            int maxPathSumWithNodeAndChildren = Math.max(maxPathSumWithNode, node.val + leftMaxPathSum + rightMaxPathSum);
            maxPathSum = Math.max(maxPathSum, maxPathSumWithNodeAndChildren);

            return maxPathSumWithNode;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值