题目(leecode T111):
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
方法:
本题和昨天的求二叉树的最大深度很像,但又不完全一样。我们需要注意对于最小深度的定义,是根节点到叶子节点的距离。而叶子节点是指左右孩子节点都为空的节点,因此我们在昨天层序遍历的方式上稍微改进一下。增加一个判断当前节点的左右孩子节点是否同时为空的逻辑,如果是的话,那么就说明可以返回深度值了,因为已经到了叶子节点,由此可得代码如下。
题解:
class Solution {
public:
int minDepth(TreeNode* root) {
if(root == NULL) return 0;
int depth = 0;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()){
int size = que.size();
depth++;
for(int i =0; i < size; i++){
TreeNode* node = que.front();
que.pop();
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
if(!node->left && !node->right){ //如果左右节点同时为空就停止
return depth;
}
}
}
return depth;
}
};