두 갈래 트리 최대치 경로 구하기

1216 단어 dfs/bfs
비교적 간단한 두 갈래 나무 제목은 처음에는 잎 노드에서 다른 잎 노드로 가는 경로의 최대치를 찾아야 한다고 생각했지만 제목은 실제로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;
    }
}

좋은 웹페이지 즐겨찾기