一、題目介紹
給定一個二叉樹,找出其最小深度。
最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定二叉樹 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最小深度 2.
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
二、解題思路
利用遞歸的思想,解決該問題。遞歸的終止條件爲:(1)當前節點爲空;(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:
void help(TreeNode* p, int depth, int& minDp)
{
if(p == NULL || depth >= minDp)
return;
if(p->left == NULL && p->right == NULL)
{
minDp = min(depth, minDp);
return;
}
help(p->left, depth+1, minDp);
help(p->right, depth+1, minDp);
}
int minDepth(TreeNode* root) {
if(root == NULL)
return 0;
int minDp = INT_MAX;
help(root, 1, minDp);
return minDp;
}
};