[LeetCode]111. Minimum Depth of Binary Tree--二叉树的最小深度

来源:互联网 发布:老网络歌曲大全 编辑:程序博客网 时间:2024/05/19 23:11

111. 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.


分析:注意此题必须要找到一个离root结点最近的叶节点,是根结点到叶结点!
举两个简单的测试用例:
1. 单结点的树,结果应该是1,因为只有1个结点,既是根节点,也是叶结点
2. [a,b] 是只有两个结点的树,结果应该是2,而不是1,因为a不是叶节点,b才是叶节点

/* 解法一:深度优先遍历 * * 时间复杂度:O(n),空间复杂度:O(lgn) *//** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int minDepth(TreeNode* root) {        // 空树直接返回0        if(root == NULL)            return 0;        // 左子树为空,则左子树不可能含有叶节点,只能在右子树中查找叶节点        if(root->left == NULL)            return 1 + minDepth(root->right);        // 如果右子树为空,则右子树不可能含有叶节点,只能在左子树中查找叶节点        if(root->right == NULL)            return 1 + minDepth(root->left);        // 如果左右子树都不为空        return 1 + min(minDepth(root->left), minDepth(root->right));           }};
/** * 迭代版本 *//** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int minDepth(TreeNode* root) {        if (root == nullptr)            return 0;        int result = INT_MAX;        stack<pair<TreeNode*, int>> s;        s.push(make_pair(root, 1));        while (!s.empty()) {            auto node = s.top().first;            auto depth = s.top().second;            s.pop();            if (node->left == nullptr && node->right == nullptr)                result = min(result, depth);            if (node->left && result > depth)                 s.push(make_pair(node->left, depth + 1));            if (node->right && result > depth)                 s.push(make_pair(node->right, depth + 1));        }        return result;    }};
阅读全文
0 0
原创粉丝点击