LeetCode111二叉樹的最小深度
阿新 • • 發佈:2020-07-26
題目連結
https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/
題解一
- 遞迴解法
- 我寫的
- 說明詳見註釋
// Problem: LeetCode 111 // URL: https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/ // Tags: Tree Recursion DFS // Difficulty: Easy #include <iostream> using namespace std; struct TreeNode{ int val; TreeNode* left; TreeNode* right; }; class Solution{ private: int min=INT_MAX; // 深度優先遍歷,在過程中記錄最小路徑 void dfs(TreeNode* root, int level){ if(root==nullptr) return; level += 1; if(root->left==nullptr && root->right==nullptr && level < this->min) this->min = level; dfs(root->left, level); dfs(root->right, level); } public: int minDepth(TreeNode* root){ // 空樹則最小路徑為0 if(root==nullptr) return 0; dfs(root, 0); return this->min; } };
題解二
- 遞迴解法
- 參考了官方的題解
- 說明詳見程式碼註釋,感覺有些地方比較不符合人的思維邏輯
// Problem: LeetCode 111 // URL: https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/ // Tags: Tree Recursion DFS // Difficulty: Easy #include <iostream> #include <algorithm> using namespace std; struct TreeNode{ int val; TreeNode* left; TreeNode* right; }; class Solution{ public: int minDepth(TreeNode* root){ // 空樹則最小路徑為0 if(root==nullptr) return 0; int left = minDepth(root->left); int right = minDepth(root->right); // 如果子樹中有空樹, 則該樹的最小深度等於子樹深度之和+1 if(left==0 || right==0) return left+right+1; // 如果子樹都不為空,則該樹的最小深度等於子樹深度較小值+1 return min(left, right)+1; } };
作者:@臭鹹魚
轉載請註明出處:https://www.cnblogs.com/chouxianyu/
歡迎討論和交流!