题目描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
解析
递归法
- 确定递归函数的参数和返回值
参数为要传入的二叉树根节点,返回的是int类型的深度。
代码如下:
int getDepth(TreeNode* node)
- 确定终止条件
终止条件也是遇到空节点返回0,表示当前节点的高度为0。
代码如下:
if (node == NULL) return 0;
- 确定单层递归的逻辑
如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。 反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。
代码
class Solution {
public:
int minDepth(TreeNode* root) {
if(root == nullptr) return 0;
\
int left = minDepth(root->left);
int right = minDepth(root->right);
\
if(root->left==nullptr && root->right!=nullptr) return 1+right;
if(root->left!=nullptr && root->right==nullptr) return 1+left;
\
return 1+min(left,right);
\
}
};