当前位置: 代码迷 >> 综合 >> LeetCode第111题解析
  详细解决方案

LeetCode第111题解析

热度:92   发布时间:2024-02-01 12:05:02.0

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3/ \9  20/  \15   7

返回它的最小深度  2.

解法一:利用递归。与求二叉树最大深度类似,只不过只是将最大深度换成了最小深度。

class Solution {
public:int minDepth(TreeNode* root) {//递归的方法//递归的终止条件if(root == NULL) return 0;if(root->left == NULL)return minDepth(root->right) + 1;if(root->right == NULL)return minDepth(root->left) + 1;//当前层的逻辑int left = minDepth(root->left) + 1;int right = minDepth(root->right) + 1;//下探到下一层return left >= right ? right : left;//清理当前状态}
};
class Solution {
public:int minDepth(TreeNode* root) {//递归的方法//递归的终止条件if(root == NULL) return 0;//当前层的逻辑int left = minDepth(root->left);int right = minDepth(root->right);if(root->left == NULL || root->right == NULL)return left == 0 ? right + 1 : left + 1;//下探到下一层return min(left, right) + 1;//清理当前状态}
};

解法二:采用迭代,注意这里和二叉树的层序遍历,以及求二叉树的层序遍历的迭代法一样,只需要注意,如果有一个节点的左右孩子都没有,则可以立刻返回。

class Solution {
public:int minDepth(TreeNode* root) {//采用递归的方法时,一旦递归到有一个节点是叶子节点,即可返回int deep = 0;queue<TreeNode*> que;if(root) que.push(root);while(!que.empty()) {deep++;int length = que.size();while(length--) {TreeNode* tmp = que.front();que.pop();if(tmp->left == NULL && tmp->right == NULL) return deep;if(tmp->left) que.push(tmp->left);if(tmp->right) que.push(tmp->right);}}return deep;}
};