27二叉树的最小深度

给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],

 3
  / \
9 20
    / \
  15 7

BFS,当遇到第一个叶子节点的时候,该节点深度就是最小深度

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if not root: return 0
        queue = [(1, root)]
        while queue:
            depth, node = queue.pop(0)
            if not node.left and not node.right:
                return depth
            if node.left:
                queue.append((depth + 1, node.left))
            if node.right:
                queue.append((depth + 1, node.right))

DFS,需要把所有的叶子节点的深度进行比较,才可以得到最终的最小深度

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if not root: return 0
        stack = [(1, root)]
        min_depth = float('inf')
        while stack:
            depth, node = stack.pop()
            if not node.left and not node.right:
                min_depth = min(min_depth, depth)
            if node.right:
                stack.append((depth + 1, node.right))
            if node.left:
                stack.append((depth + 1, node.left))       
        return min_depth 

递归法

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if(not root):return 0
        if(not root.left):return self.minDepth(root.right)+1
        if(not root.right):return self.minDepth(root.left)+1
        return min(self.minDepth(root.left),self.minDepth(root.right))+1

来源:力扣(LeetCode)

你可能感兴趣的:(27二叉树的最小深度)