LeetCode 111 二叉樹的最小深度

2021-10-23 14:47:36 字數 2366 閱讀 7831

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

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

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

示例:

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

3

/ \9 20

/ \

15 7

返回它的最小深度  2。

思路及解法

首先可以想到使用深度優先搜尋的方法,遍歷整棵樹,記錄最小深度。

對於每乙個非葉子節點,我們只需要分別計算其左右子樹的最小葉子節點深度。這樣就將乙個大問題轉化為了小問題,可以遞迴地解決該問題。

c++

class solution 

if (root->left == nullptr && root->right == nullptr)

int min_depth = int_max;

if (root->left != nullptr)

if (root->right != nullptr)

return min_depth + 1;

}};

python

class solution:

def mindepth(self, root: treenode) -> int:

if not root:

return 0

if not root.left and not root.right:

return 1

min_depth = 10**9

if root.left:

min_depth = min(self.mindepth(root.left), min_depth)

if root.right:

min_depth = min(self.mindepth(root.right), min_depth)

return min_depth + 1

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

def mindepth(self, root: treenode) -> int:

if not root:

return 0

l, r = self.mindepth(root.left), self.mindepth(root.right)

if root.left and root.right:

return 1+min(l, r)

else:

return 1+l+r

複雜度分析

思路及解法

同樣,我們可以想到使用廣度優先搜尋的方法,遍歷整棵樹。

當我們找到乙個葉子節點時,直接返回這個葉子節點的深度。廣度優先搜尋的性質保證了最先搜尋到的葉子節點的深度一定最小。

c++

class solution 

queue> que;

que.emplace(root, 1);

while (!que.empty())

if (node->left != nullptr)

if (node->right != nullptr)

}return 0;

}};

python

class solution:

def mindepth(self, root: treenode) -> int:

if not root:

return 0

que = collections.deque([(root, 1)])

while que:

node, depth = que.popleft()

if not node.left and not node.right:

return depth

if node.left:

if node.right:

return 0

複雜度分析

leetcode 111 二叉樹的最小深度

題目描述 給定乙個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最小深度 2.思路 採用後序遍歷,當前結點的深度最小深度等於左右子樹較小深...

LeetCode111 二叉樹的最小深度

解析 求二叉樹的最小深度,即求從根節點到任一子節點,深度的最小值。本題類似求二叉樹的最大深度,都是用遞迴求解。二叉樹的最大深度 分別求出根節點左孩子和右孩子的深度,然後將兩者中較大值加1返回即可。同樣的,求解二叉樹的最小深度,我們要比較兩者中的較小值加1返回。但還有一點要注意,就是如果一棵二叉樹只有...

LeetCode 111 二叉樹的最小深度

給定乙個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最小深度 2.如果節點是空,那麼返回0 如果節點左右子樹都為空,那麼返回1 如果節...