天天看點

【LeetCode 32】111.二叉樹的最小深度

【LeetCode 32】111.二叉樹的最小深度

文章目錄

  • ​​【LeetCode 32】111.二叉樹的最小深度​​
  • ​​一、題意​​
  • ​​二、思路​​
  • ​​2.1遞歸法​​

一、題意

【LeetCode 32】111.二叉樹的最小深度

二、思路

這道題和之前求得 《104.二叉樹的最大深度》

不同,不同在邏輯處理上。注意這裡的概念, **最小深度:**最是從根節點到最近葉子節點的最短路徑上的節點數量。

【LeetCode 32】111.二叉樹的最小深度

2.1遞歸法

同樣是三部曲:

class Solution {
public:
//1.确定函數參數和傳回值
    int getDepth(TreeNode *node)
    {
        if(node==NULL) return 0;//2.判斷終止條件

        //3.确定單層遞歸邏輯:

        int leftDepth=getDepth(node->left);//左
        int rightDepth=getDepth(node->right);//右

        
        /*
        核心思路:
        是以,如果左子樹為空,右子樹不為空,說明最小深度是 1 + 右子樹的深度。反之,右子樹為空,左子樹不為空,最小深度是 1 + 左子樹的深度。 最後如果左右子樹都不為空,傳回左右子樹深度最小值 + 1 。    
        */
        //當左子樹為空,右子樹不為空,并不是最大深度
        if(node->left==NULL&&node->right!=NULL)
        {
            return 1+rightDepth;
        }

        if(node->left!=NULL&&node->right==NULL)
        {
            return 1+leftDepth;
        }
        int result=1+min(leftDepth,rightDepth);
        return result;
    }
    int minDepth(TreeNode* root) {
        return getDepth(root);
    }
};      

核心思路:

是以,如果左子樹為空,右子樹不為空,說明最小深度是 1 + 右子樹的深度。反之,右子樹為空,左子樹不為空,最小深度是 1 + 左子樹的深度。 最後如果左右子樹都不為空,傳回左右子樹深度最小值 + 1 。