111. 二叉树的最小深度

Problem: 111. 二叉树的最小深度

思路

与上一道题目类似,都可以用后续遍历做,但是这里求最小深度,但是下面情况:

根节点的左节点为右节点不为空,或者右节点为左节点不为空

都不能算作最小深度为1  

7C190F9192DA0482418A62D8DD1AE1C7.jpg

所以我们要注意处理这种情况,放回的值应该是另一个字节的的最小深度

复杂度

时间复杂度:

添加时间复杂度, 示例: $O(n)$

空间复杂度:

添加空间复杂度, 示例: $O(n)$

Code

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

/**

 * 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 minDepth(TreeNode* root) { return foreach (root); }

    int foreach (TreeNode* node) {

        if (node == nullptr)

            return 0;

        int left = foreach (node->left);

        int right = foreach (node->right);

        if (node->left == nullptr && node->right != nullptr)

            return 1 + right;

        if (node->left != nullptr && node->right == nullptr)

            return 1 + left;

        return 1 + std::min(left, right);

    }

};