zoukankan      html  css  js  c++  java
  • 路径总和、二叉树的最小深度(力扣第112、111题)

    题目:

      给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。

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

    示例:

    给定如下二叉树,以及目标和 sum = 22

                  5
                 / 
                4   8
               /   / 
              11  13  4
             /        
            7    2      1

    返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2

    分析:

      题目是求是否存在某一条从根节点到叶子节点的路径,这个路径上的所有节点的值相加等于目标和。从根节点到叶子节点,本质就是树的遍历,那么可以定义一个变量,用于记录从根节点开始遍历路径上的所有节点的和,判断当遇到叶子节点的时候是否和目标和相等,如果相等,那么就将记录最终结果的不二类型的成员变量置为true,否则返回继续遍历。

    代码:

        private boolean isTargrt = false;
        public boolean hasPathSum(TreeNode root, int sum) {
    
            if (root == null){
                return false;
            }
    
            traversalTree(root,0,sum);
            return isTargrt;
        }
    
        private void traversalTree(TreeNode root,int curSum,int sum){
            if (root == null){
                return;
            }
            curSum += root.val;
            if (root.right == null && root.left == null){
    
                if (curSum == sum){
                    isTargrt = true;
                }
                return;
            }
            traversalTree(root.left,curSum,sum);
            traversalTree(root.right,curSum,sum);
        }

    题目:二叉树的最小深度

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

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

    示例:

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

        3
       / 
      9  20
        /  
       15   7

      返回它的最小深度  2

    分析:

      求最小深度和求树的高度正好是相反的,求树的高度是从根节点到最远叶子节点的最长路径上的节点数,而最小深度是从根节点到最近叶子节点的最短路径上的节点数。都是与树的深度计算相关,但是一个是最短的,一个是最长的。求树的高度是通过计算左右子树的最大深度然后加1得出最终答案的,那么本题可以通过计算左右子树最小深度然后加1得出最终的答案。

      不过这里需要注意的是,因为我们要求的最小的深度,所以返回值一定是取左右子树最小深度的最小值然后加1,但是可能存在某个子树为null的情况,比如某个节点,其只有左子树,而没有右子树,那么右子树的最小深度一定是0,而左子树的最小深度肯定大于0,按照上面的返回值计算方式,最终返回的右子树的最小深度值加1,即1,但是这是不正确的,为什么呢?因为右子树根本就没有叶子节点,右子树不存在,也就不可能有叶子节点,叶子节点只可能在左子树才有,所以需要再专门有个讨论,就是访问到某个节点的时候,计算完这个节点的子树的最小深度,判断两个子树是否最小深度为0,如果有为0,那就直接返回不为0的子树的最小深度值加1。这就是与求高度不同的地方。特别注意!!!

    代码:

        public int minDepth(TreeNode root) {
    
            if (root == null){
                return 0;
            }
            int left_length = minDepth(root.left);
            int right_length = minDepth(root.right);
    
            if (left_length == 0 || right_length == 0){
                return left_length + right_length + 1;
            }
    
            return Math.min(left_length,right_length)+1;
        }
  • 相关阅读:
    人工智能学习笔记003-Python运算符
    人工智能学习笔记002-Python数据类型
    人工智能学习笔记001—python介绍
    dataclasses 笔记
    Js逆向-滑动验证码图片还原
    python3 marshmallow学习
    python 安装 SQLAlchemy 报错
    flask 与 SQLAlchemy的使用
    flask 与 flask_migrate的使用
    flask与flask-script的使用
  • 原文地址:https://www.cnblogs.com/yxym2016/p/13492856.html
Copyright © 2011-2022 走看看