leetcode 111 二叉樹的最小深度
給定一個二叉樹,找出其最小深度。
最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明:葉子節點是指沒有子節點的節點。
參考二叉樹的最大深度,傳送門:
https://blog.csdn.net/CLZHIT/article/details/111118994
參考來自微信公眾號程式碼隨想錄的文章:
二叉樹的最小深度
解法一:遞迴解法
求二叉樹的最小深度和求二叉樹的最大深度的差別主要在於處理左右孩子不為空的邏輯。
class Solution {
public:
int minDepth(TreeNode* root) {
// if(root == nullptr)
// {
// return 0;
// }
// return process1(root, 1);
return process2(root);
}
int process1(TreeNode* root, int level)
{
if(!root->left && !root->right) return level;
int res = INT_MAX;
if(root->left) res = min(res, process1(root->left, level+1));
if(root->right) res = min(res, process1(root->right, level+1));
return res;
}
int process2(TreeNode* root)
{
if(root == nullptr) return 0;
int leftDepth = process2(root->left);
int rightDepth = process2(root->right);
if(!root->left && root->right) return 1+rightDepth;
if(!root->right && root->left) return 1+leftDepth;
int result = 1 + min(leftDepth, rightDepth);
return result;
}
};
解法二:非遞迴解法
需要注意的是,只有當左右孩子都為空的時候,才說明遍歷的最低點了。如果其中一個孩子為空則不是最低點。
class Solution {
public:
int minDepth(TreeNode* root) {
int depth = 0;
queue<TreeNode*> que;
vector<int> level;
int flag = false;
if(root != nullptr) que.push(root);
while(!que.empty())
{
depth++;
int size = que.size();
for(int i = 0; i < size; i++)
{
TreeNode* tmpNode = que.front();
que.pop();
if(tmpNode->left) que.push(tmpNode->left);
if(tmpNode->right) que.push(tmpNode->right);
if(!tmpNode->left && !tmpNode->right) flag = true;
}
if(flag) break;
}
return depth;
}
};
相關文章
- 「leetcode」111.二叉樹的最小深度LeetCode二叉樹
- 111. 二叉樹的最小深度二叉樹
- 111. 二叉樹的最小深度(***)二叉樹
- 二叉樹的最大深度和最小深度二叉樹
- 二叉樹的最大/最小深度二叉樹
- 二叉樹的最小深度問題二叉樹
- Day16 | 104.二叉樹的最大深度 、111.二叉樹的最小深度 、222.完全二叉樹的節點個數二叉樹
- 程式碼隨想錄day14 || 226 翻轉二叉樹,101 對稱二叉樹, 104 二叉樹的最大深度, 111 二叉樹的最小深度二叉樹
- 程式碼隨想錄演算法訓練營第十四天|leetcode226. 翻轉二叉樹、leetcode101.對稱二叉樹、leetcode104.二叉樹的最大深度、leetcode111.二叉樹的最小深度演算法LeetCode二叉樹
- 程式碼隨想錄演算法訓練營day16 | leetcode 104. 二叉樹的最大深度、559. N 叉樹的最大深度、111. 二叉樹的最小深度、222. 完全二叉樹的節點個數演算法LeetCode二叉樹
- 【leetcode 簡單】第二十七題 二叉樹的最小深度LeetCode二叉樹
- 程式碼隨想錄 第十六天 | ● 104.二叉樹的最大深度 559.n叉樹的最大深度 ● 111.二叉樹的最小深度 ● 222.完全二叉樹的節點個數二叉樹
- 二叉樹的最小高度,最大高度(深度)和寬度二叉樹
- 程式碼隨想錄演算法訓練營第第16天 | 104.二叉樹的最大深度 、111.二叉樹的最小深度、222.完全二叉樹的節點個數演算法二叉樹
- 程式碼隨想錄演算法訓練營第十六天 | 104.二叉樹的最大深度 111.二叉樹的最小深度 222.二叉樹的節點個數演算法二叉樹
- LeetCode 104.二叉樹的最大深度LeetCode二叉樹
- 二叉樹的深度二叉樹
- 程式碼隨想錄演算法訓練營第十四天| 226.翻轉二叉樹 、101. 對稱二叉樹、104.二叉樹的最大深度 (優先掌握遞迴)、111.二叉樹的最小深度演算法二叉樹遞迴
- 二叉樹深度二叉樹
- 二叉樹---深度二叉樹
- 【LeetCode 111_二叉樹_遍歷】Minimum Depth of Binary TreeLeetCode二叉樹
- [Golang]力扣Leetcode—初級演算法—樹—二叉樹的最大深度Golang力扣LeetCode演算法二叉樹
- LeetCode每日一題:二叉樹的最大深度(No.104)LeetCode每日一題二叉樹
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- JZ-038-二叉樹的深度二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 二叉樹的深度、寬度遍歷及平衡樹二叉樹
- 【劍指offer】二叉樹深度二叉樹
- Python二叉樹的三種深度Python二叉樹
- 每日一練(27):二叉樹的深度二叉樹
- 5分鐘瞭解二叉樹之LeetCode裡的二叉樹二叉樹LeetCode
- LeetCode 對稱二叉樹LeetCode二叉樹
- 劍指Offer-40-二叉樹的深度二叉樹
- 劍指offer——二叉樹的深度C++二叉樹C++
- 《劍指offer》:[39]求解二叉樹的深度二叉樹
- Maximum Depth of Binary Tree 二叉樹的深度二叉樹
- Leedcode-二叉搜尋樹的最小絕對差
- leetcode 530. Minimum Absolute Difference in BST二叉搜尋樹的最小絕對差 (簡單)LeetCode