Recur

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (!root) return 0;
        int L = maxDepth(root->left);
        int R = maxDepth(root->right);
        return max(L, R) + 1;
    }
};

BFS

class Solution {
public:
    int maxDepth(TreeNode* root) {
        queue<TreeNode*> que;
        if (root) que.push(root);
        int level = 0;
        while (!que.empty()) {
            int size = que.size();
            for (int i = 0; i < size; i ++) {
                TreeNode* cur = que.front();
                que.pop();
                if (cur->left) que.push(cur->left);
                if (cur->right) que.push(cur->right);
            }
            level ++;
        }
        return level;
    }
}