题目链接:https://leetcode.com/problems/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. 为空,则深度0
2. 左右子树有一个为空,则只计算左右子树一边的深度
3. 左右子树都不为空,则比较左右子树哪个深度较小
代码如下:
/**
* 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 == NULL) return 0;
if(!root->left && !root->right) return 1;
if(!root->left) return minDepth(root->right)+1;//左子树为空,则只计算右子树深度
if(!root->right) return minDepth(root->left)+1;//右子树为空,则只计算左子树深度
return min(minDepth(root->left), minDepth(root->right)) + 1;
}
};
还有一种方式是BFS,利用队列来实现,依次将每个结点的左右子树和其深度入队列,出队列的时候看这个结点的左右子树是否为空,为空的话则这个结点的深度就是我们要求的最小深度,因为按照层次遍历第一个左右子树都为空的结点肯定就是深度最小的叶子结点了.
代码如下:
/**
* 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 == NULL) return 0;
queue> que;
que.push(pair(root, 1));
while(!que.empty())
{
auto node = que.front();
que.pop();
if(!node.first->left && !node.first->right)
return node.second;
if(node.first->left)
que.push(pair(node.first->left, node.second+1));
if(node.first->right)
que.push(pair(node.first->right, node.second+1));
}
}
};
第二种方法参考:https://leetcode.com/discuss/84134/c-bfs-solution