LintCode: 두 갈래 나무의 최소 깊이

Lintcode: 두 갈래 나무의 최소 깊이
두 갈래 나무를 정해 최소 깊이를 찾아라.
두 갈래 나무의 최소 깊이는 뿌리 노드에서 가장 가까운 잎 노드까지의 거리다.
두 갈래 나무의 최대 깊이와 달리 단순히 귀속을 사용할 수 없다. 두 갈래 나무의 깊이는 반드시 뿌리 결점에서 잎 결점까지의 거리이기 때문에 좌우 자목의 귀속 결과의 비교적 작은 값을 비교할 수 없다. 왜냐하면 한 아이가 비어 있는 노드에 대해 비어 있는 아이는 0을 되돌려주지만 이 노드는 잎 노드가 아니기 때문에 돌아오는 결과는 잘못된 것이다.
따라서 현재 처리된 노드에 한 아이가 비어 있는 것을 발견하면 최대치 INT_MAX, 결과를 방해하지 않습니다.

/** * 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 minDepth(TreeNode *root) {
        // write your code here
        if (root == NULL) return 0;
        if (root->left == NULL && root->right == NULL) return 1;
        int m = minDepth(root->left) + 1;
        int n = minDepth(root->right) + 1;

        m = (m == 1 ? INT_MAX : m);
        n = (n == 1 ? INT_MAX : n);

        return m < n ? m : n ;
    }
};


참고 자료

좋은 웹페이지 즐겨찾기