• [LeetCode] 111. 二叉树的最小深度


    题目链接 : https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/

    题目描述:

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

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

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

    示例:

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

        3
       / 
      9  20
        /  
       15   7
    返回它的最小深度  2.
    

    思路:

    思路很简单, 就是左右子树高度,选最小那个

    刚开始我是这样做的

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

    但是有个错误例子

       1
      /
     2
    

    我们的算法求出是1,正确答案是2,也就是根节点不能是叶子节点!

    所以,要想办法解决这个问题,我采用是提前判断是否是叶子节点!

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

    大家可以借鉴一下,网上有更简洁的版本.

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

    java

     public int minDepth(TreeNode root) {
            if (root == null) return 0;
            int left = minDepth(root.left);
            int right = minDepth(root.right);
            return (left == 0 || right == 0) ? left + right + 1 : Math.min(left, right) + 1;
        }
    
  • 相关阅读:
    不要做优化了!让编译器去干吧!
    arp欺骗进行流量截获-2
    arp欺骗进行流量截获-1
    Python3网络爬虫(1):利用urllib进行简单的网页抓取
    python3.5opencv3图像文字标注
    python3.5连接MySQL
    MySQL安装
    Matplotlib python 基本用法
    servlet表单中get和post方法的区别
    任意目录下启动tomcat
  • 原文地址:https://www.cnblogs.com/powercai/p/11107471.html
Copyright © 2020-2023  润新知