【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); //左右子樹同時存在時返回倆者最小值,否則返回僅有的那棵子樹 也就是最大值 } } };