求二叉樹的最小深度:從根節點到最近葉子節點的路徑節點數。注意:葉子節點定義為左右子節點均為空。
示例:
3
/ \
9 20
/ \
15 7
/
14
最小深度 = 2(路徑 3→9)。
BFS 逐層遍歷,首次遇到葉子節點即為最小深度,可提前終止。DFS 需遍歷全樹才能確定最小值,效率較低。
depth = 0。depth++depth(找到最淺葉子)class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def minDepth(self, root):
if not root:
return 0
depth = 0
curr_level = [root]
while curr_level:
depth += 1
next_level = []
for node in curr_level:
if not node.left and not node.right:
return depth
if node.left:
next_level.append(node.left)
if node.right:
next_level.append(node.right)
curr_level = next_level
return depth
int minDepth(TreeNode* root) {
if (!root) return 0;
queue<TreeNode*> q;
q.push(root);
int depth = 0;
while (!q.empty()) {
++depth;
int sz = q.size();
for (int i = 0; i < sz; ++i) {
auto node = q.front(); q.pop();
if (!node->left && !node->right) return depth;
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
return depth;
}
❌ 錯誤寫法:return min(minDepth(left), minDepth(right)) + 1
此法在單子樹情況下會錯誤返回 1(應為子樹深度+1)。BFS 天然規避此問題。