【leetcode】124. 두 갈래 나무의 최대 경로와

4085 단어 LeetCode

제목


비공 두 갈래 트리를 지정하고 최대 경로와 를 되돌려줍니다.
본고에서 경로는 나무의 임의의 노드에서 출발하여 임의의 노드에 도달하는 서열로 정의되었다.이 경로는 루트 노드를 거치지 않고 하나 이상의 노드를 포함합니다.

생각


이 제목은 처음에 나는 생각이 없어서 어리둥절한 표정이었다.처음에는 검색해서 해결하자고 생각했지만 결과가 반드시 루트를 거치는 것은 아니었다. 그리고 나는 생각이 없었다.그럼 문제를 간소화해라. 만약 답안이 반드시 뿌리 노드를 거친다면, 귀속 구해는 매우 간단하다.그러나 귀속 구해 과정 중의 함수의 정의를 깊이 연구해 보면 이 함수는 이 노드를 루트 노드로 하는 가장 큰 값을 구할 수 있을 뿐이다.문제는 하위 문제를 어떻게 원래의 문제로 통합시킬 것인가에 있다.가장 좋은 것은 두 가지 상황이 있는데,
  • 좌자수+뿌리+우자수
  • 왼쪽 나무와 오른쪽 나무가 큰 + 뿌리
  • 문제는 또 왔다. + + 에서 나온 최우선은 그 부 노드의 최우선에 속하지 않는다. + 만이 부모 노드에 속하는 가장 좋은 것을 포함한다.
    그러면 이런 비부 노드의 가장 좋은 포함 상황 + + 과 같이 우리는 전역 변수로 저장할 수 있다.그러면 코드가 쉽게 나와요.

    코드

    class Solution {
    private:
        int ret = INT_MIN;
        int getMax(TreeNode * root) {
            if (root == nullptr) return 0;
            int left = max(0, getMax(root->left));
            int right = max(0, getMax(root->right));
            ret = max(ret, root->val + left + right);
            return max(left, right) + root->val; 
        }
    public:
        int maxPathSum(TreeNode* root) {
            return max(ret, getMax(root));
        }
    }
    

    좋은 웹페이지 즐겨찾기