力扣:111.二叉树的最小深度
题目:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
递归法思路:
如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。
反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1。
代码:
class Solution {
public:
int minDepth(TreeNode* root) {
if(!root) return 0;
int leftd = minDepth(root->left);
int rightd = minDepth(root->right);
if(root->left && !root->right) return 1+leftd;
if(root->right &&!root->left) return 1+rightd;
return 1+min(leftd,rightd);
}
};
迭代法思路:
按层 遍历,当遍历到某一层某一个节点没有子孙时,此时确定最小深度。
代码:
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;
}
};