【LeetCode】543. 두 갈래 나무의 지름

4022 단어 LeetCode
제목 링크:https://leetcode-cn.com/problems/diameter-of-binary-tree/description/

제목 설명


두 갈래 나무를 정하려면 직경의 길이를 계산해야 한다.두 갈래 나무의 지름 길이는 두 개의 결점 경로 길이 중 최대값입니다.이 경로는 루트 끝점을 통과할 수 있습니다.
예: 두 갈래 트리 지정하기
      1
     / \
    2   3
   / \     
  4   5    

3을 되돌려줍니다. 길이는 경로 [4, 2, 1, 3] 또는 [5, 2, 1, 3]입니다.
참고: 두 결점 사이의 경로 길이는 둘 사이의 모서리 수로 표시됩니다.

해결 방법


귀속을 이용하여 모든 뿌리 노드에 대해 왼쪽의 깊이와 오른쪽의 깊이를 계산하고 왼쪽의 깊이를 더하면 현재 자나무의 직경이며 한 그루의 자나무를 두루 훑어본 후 가장 큰 자름은 두 갈래 나무의 직경이다.
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
// , , ,
// , 。
class Solution {
public:
    int diameterOfBinaryTree(TreeNode* root) {
        int res=0;
        depth(root,res);
        return res;
    }
private:
    int depth(TreeNode *root,int &res){
        if (!root) return 0;
        int left_depth=depth(root->left,res);
        int right_depth=depth(root->right,res);
        res=max(res,right_depth+left_depth);
        return max(left_depth+1,right_depth+1);
    }
};

좋은 웹페이지 즐겨찾기