题目描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:2
示例 2:
输入:root = [2,null,3,null,4,null,5,null,6]
输出:5
dfs遍历
采用递归的方法,代码十分简洁
class Solution: def minDepth(self, root: TreeNode) -> int: def run(node): if node == None: return 0 if node.left == None: return run(node.right)+1 if node.right == None: return run(node.left)+1 return min(run(node.left), run(node.right))+1 return run(root)
bfs遍历
虽然bfs和dfs的时间复杂度都是O(n),但由于bfs没有遍历,所以实际上bfs会快很多
class Solution: def minDepth(self, root: TreeNode) -> int: if root == None: return 0 queue = [] queue.append((root, 1)) while (queue != []): node, depth = queue.pop(0) # print(depth) if node.left == None and node.right == None: return depth if node.left != None: queue.append((node.left, depth+1)) if node.right != None: queue.append((node.right, depth+1)) return 0
参考:
https://leetcode-cn.com/problems/minimum-depth-of-binary-tree