后序遍历树,这样在回到每个节点时,其节点左右子树的最小深度都已经计算完毕,当前节点的最小深度就等于左右子树中较小深度加一。
递归边界:如果节点是空节点,最小深度返回INT_MAX,如果节点是叶节点,最小深度为1。
时间复杂度O(N),空间复杂度O(N)。
int minDepth(TreeNode* root) { if(root == nullptr) { return INT_MAX; } if(root->left == nullptr && root->right == nullptr) { return 1; } int leftDepth = minDepth(root->left); int rightDepth = minDepth(root->right); int depth = min(leftDepth, rightDepth); //不会得到depth == INT_MAX的情况 return depth+1; } int run(TreeNode* root) { if(root == nullptr) { return 0; } return minDepth(root); }