Leetcode 104. 二叉树的最大深度 & 111. 二叉树的最小深度(Python3)

这两道题差不多。

思路:

1.BFS

2.DFS

 

104. 二叉树的最大深度

说明: 叶子节点是指没有子节点的节点。

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

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

 

1.BFS代码:

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:return 0
        queue ,level = [],0
        queue.append(root)
        while queue:
            level += 1
            for _ in range(len(queue)):
                node = queue.pop(0)
                if node.left:queue.append(node.left)
                if node.right:queue.append(node.right)
        return level

 

2.DFS代码:

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:return 0
        return 1 + max(self.maxDepth(root.left),self.maxDepth(root.right))

总结:

1.BFS和DFS的时间复杂度都O(N)

2.实际执行时间一样,第一遍ac的时候dfs稍慢点,原因不明

3.DFS的递归写法更容易理解

 

111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例:

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

    3
   / \
  9  20
    /  \
   15   7

返回它的最小深度  2.

 

1.BFS代码:

class Solution(object):
    def minDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:return 0
        queue,level = [],0
        queue.append(root)
        while queue:
            level += 1
            for _ in range(len(queue)):
                node = queue.pop(0)
                if node.left:queue.append(node.left)
                if node.right:queue.append(node.right)
                if node.left == None and node.right == None:return level

 

2.DFS代码:

class Solution(object):
    def minDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:return 0
        if not root.left:return 1 + self.minDepth(root.right)
        if not root.right:return 1 + self.minDepth(root.left)

        left = self.minDepth(root.left)
        right = self.minDepth(root.right)

        return 1 + min(left,right)

2.的改写:

class Solution(object):
    def minDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:return 0
        left = int(self.minDepth(root.left))
        right = int(self.minDepth(root.right))
        return left + right + 1 if (left == 0 or right == 0) else 1 + min(left,right)

 

你可能感兴趣的:(python3,leetcode)