LintCode - 두 갈래 트리의 최대 경로 및

1207 단어 면접lintcode
두 갈래 트리를 제시하고 경로와 최대를 찾을 수 있습니다. 경로는 어느 노드에서 시작하고 끝낼 수 있습니다. (경로와 두 노드 사이에 있는 경로의 노드 값의 합)
예제
두 갈래 나무 한 그루를 주시오.
       1
      / \
     2   3

복귀 6분석: 모든 최장 경로는 반드시 어떤 정점을 따르고 양쪽은 그 노드를 잎 노드로 따라가는 최장 경로이다.
코드:
/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @param root: The root of binary tree.
     * @return: An integer
     */
    int maxPathSum(TreeNode *root) {
        // write your code here
        int ret = INT_MIN;
        onePath(root,ret);
        return ret;
    }
    int onePath(TreeNode* root,int&ret)
    {
        if(root==nullptr)
            return 0;
        int l = onePath(root->left,ret);
        int r = onePath(root->right,ret);
        ret = max(ret,max(0,l)+max(0,r)+root->val);
        return max(0,max(l,r))+root->val;
    }
};

좋은 웹페이지 즐겨찾기