【Leetcode】做题家之111. Minimum Depth of Binary Tree

请看题

Example

思路

从Leetcode给我们的例子中可以看出来,我们需要获取到节点深度为最低的那个值,在第一个例子中,最低节点深度为2,从3到9

在第二个例子中,最低节点深度为5,因为它只有右孩子而没有左孩子。

那么问题来了,怎么去获取这个节点最低深度呢?

首先,先把当传入的节点为空条件写出来

!root 返回0;这是因为会有一个测试条件来传入空树。

然后我们就可以开始写另外一个函数来获取到最低深度了,这里需要用的是基本函数为min

getMinDepth(root)

让我们来写这么一个函数,返回值为int。

还是要写一个最基本的判断,跟上面的if一样。

这两个if有什么不同呢?

第一个if来接受题目传入的参数,如果为空直接结束了不会进入到我们的另外一个函数中。

第二个if,也就是我们的递归函数,递归函数最重要的一个条件就是写出结束条件,当为空,那么既是结束条件


写出了第一二个条件可以就可以思考接下来该怎么去写了。如果左右节点都为空的时候会发生什么呢?

左右节点都为空

如果发生以上情况树的深度会不会是1呢?答案是的,深度为1。因为只有一个头节点,一个头节点等于深度1

最后只需要使用min函数来获取到底是左还是右是最低深度了,这里就不多讲诉怎么去用min了。能进入到递归函数也就很明显的说明了这棵树最少深度会为2. 如果想不明白用笔在纸上试试看吧!


Code

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int getMinDepth(TreeNode* root)
    {
        if(!root)
        {
            return INT_MAX;
        }
        if(!root->left && !root->right)
        {
            return 1;
        }
        return 1 + min(getMinDepth(root->left), getMinDepth(root->right));
    }
    int minDepth(TreeNode* root) {
        if(!root)
        {
            return 0;
        }
        return getMinDepth(root);
    }
};

结束。

1 个赞

好坚持刷题啊

1 个赞

常规话题软件开发

事实上是要准备考试

这题我好像C+刷过,已经完全没印象了

From #dev to 开发调优