【Leetcode】二叉樹的最小深度

  • 2019 年 11 月 7 日
  • 筆記

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/weixin_42449444/article/details/90210024

題目描述:

給定一個二叉樹,找出其最小深度。

最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。

說明: 葉子節點是指沒有子節點的節點。

示例:

給定二叉樹 [3,9,20,null,null,15,7],

    3     /     9  20      /       15   7

返回它的最小深度 2.

解題思路:

這題和【LeetCode】二叉樹的最大深度很相似,我都是採用遞歸求解(流下了菜雞的淚水)。我一開始擼出來的代碼WA啦,[1,2]這個測試用例,我輸出的最小深度是1,而答案說預期輸出結果應該是2。因為根據題目描述「最小深度是從根結點到最近葉子結點的最短路徑上的結點數量」,除非是只有一個根結點,否則必須要有一個葉子結點與根結點相連才能組成路徑,所以[1,2]最小深度是2,[1]最小深度是1。 只有當左右子樹同時存在時 才返回(1+左右子樹中的最小深度),否則返回(不為空的那棵子樹的深度+1)。

CppACWA代碼:

/**   * 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:      int minDepth(TreeNode* root) {          if(root == NULL)          {              return 0;          }          else          {              return 1 + min(minDepth(root->left),minDepth(root->right));          }      }  };

CppAC代碼:

/**   * 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:      int minDepth(TreeNode* root) {          if(root == NULL)          {              return 0;          }          else          {              int left = minDepth(root->left);              int right = minDepth(root->right);              return (left && right) ? 1+min(left,right):1+max(left,right);  //左右子樹同時存在時返回倆者最小值,否則返回僅有的那棵子樹 也就是最大值          }      }  };