minimum-depth-of-binary-tree

题目描述
Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.


首先我们注意到,二叉树的深度从根结点往下数到叶子结点等于从叶子结点数到根结点,所以我们可以从下往上来数数的深度。

我们可以使用递归的方法,遍历每个结点。每个结点的最小深度=该结点的左右子树的最小深度 + 1。通过依此比较左右子树的深度,取最小值,最后便能计算出整个二叉树的最小深度了。

但是由于题目中给定的是一个普通的binary tree而不是full binary tree(每个结点只要有子结点就一定是两个),就可能出现类似以下情况:

也就是说,会出现有的结点只有右子树而没有左子树(如上图),亦或是只有左子树没有右子树。如上图,在计算结点c的最小深度时,它的左子树的深度为0(空结点深度为0),而右子树深度为1,根据之前的算法我们将会得到结点c的最小深度为1。但是题目指出的最小深度为根结点到叶子结点的最短路径所经过的结点数,显然结点c并不是叶子结点,不符合题目要求。

所以我们需要处理这种情况。对于每个结点,我们可以判断其左右子树是否为空。若左右子树均为空,可知我们这个结点为叶子结点,返回1;若左子树为空而右子树不为空,我们应该返回的是右子树的深度+1;若左子树不为空而右子树为空,则返回左子树的深度+1。当左右子树均不为空时,返回左右子树深度的最小值+1。

class Solution {
public:
    int run(TreeNode *root) {
        if (root == NULL)
            return 0;
        if (root->left == NULL && root->right == NULL)
            return 1;
        if(root->left == NULL && root->right != NULL)
            return run(root->right) + 1;
        if(root->left != NULL && root->right == NULL)
            return run(root->left) + 1;
        int leftDepth = run(root->left) +1;
        int rightDepth = run(root->right) + 1;
        return min(leftDepth, rightDepth);
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值