二叉树求最大值路径

比较简单的二叉树题目,一开始以为需要找从叶节点到另一个叶节点的路径的最大值,但题目实际上说start|end可以是任意节点,实现过程稍微有点不一样,不过思路大致是相同的。

题目:

Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1
/ \
2 3
Return 6.

代码实现:

public class Solution {
    public int maxPathSum(TreeNode root) {
        if(root==null)
            return 0;
        int[] res=new int[1];
        res[0]=Integer.MIN_VALUE;
        maxDfs(root,res);
        return res[0];
    }
    private int maxDfs(TreeNode root,int[] res){
        int curRootSum=root.val;
        int depthMax=0;
        int subMax;
        if(root.left!=null){
            subMax=maxDfs(root.left,res);
            if(subMax>0) {
                depthMax = Math.max(depthMax,subMax);
                curRootSum += subMax;
            }
        }
        if(root.right!=null){
            subMax=maxDfs(root.right,res);
            if(subMax>0) {
                depthMax = Math.max(depthMax,subMax);
                curRootSum += subMax;
            }
        }
        res[0]=Math.max(res[0],curRootSum);
        return depthMax+root.val;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值