• NC9 二叉树中和为某一值的路径(一)


    描述
    给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。
    1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
    2.叶子节点是指没有子节点的节点
    3.路径只能从父节点到子节点,不能从子节点到父节点
    4.总节点数目为n

    例如:
    给出如下的二叉树,sum=22,
    在这里插入图片描述
    返回true,因为存在一条路径 5→4→11→2的节点值之和为 22

    数据范围:
    1.树上的节点数满足 0≤n≤10000
    2.每 个节点的值都满足 ∣val∣≤1000
    要求:空间复杂度 O(n),时间复杂度 O(n)
    进阶:空间复杂度 O(树的高度),时间复杂度 O(n)

    示例1
    输入:{5,4,8,1,11,#,9,#,#,2,7},22
    返回值:true
    
    示例2
    输入:{1,2},0
    返回值:false
    
    示例3
    输入:{1,2},3
    返回值:true
    
    示例4
    输入:{},0
    返回值:false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    牛客
    递归法:根节点加入到左右节点中,然后再判断。
    在这里插入图片描述
    在这里插入图片描述

    import java.util.*;
    
    /*
     * public class TreeNode {
     *   int val = 0;
     *   TreeNode left = null;
     *   TreeNode right = null;
     * }
     */
    
    public class Solution {
        /**
         * 
         * @param root TreeNode类 
         * @param sum int整型 
         * @return bool布尔型
         */
        public boolean hasPathSum (TreeNode root, int sum) {
            // write code here
            if(root == null)return false;
            if(root.left==null && root.right == null && sum == root.val) return true;
            if(root.left != null) root.left.val += root.val;
            if(root.right!=null)  root.right.val += root.val;
            return hasPathSum(root.left,sum) || hasPathSum(root.right,sum);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    层次遍历的方法

    import java.util.*;
    
    /*
     * public class TreeNode {
     *   int val = 0;
     *   TreeNode left = null;
     *   TreeNode right = null;
     * }
     */
    
    public class Solution {
        /**
         * 
         * @param root TreeNode类 
         * @param sum int整型 
         * @return bool布尔型
         */
        public boolean hasPathSum (TreeNode root, int sum) {
            // write code here
            if(root == null)return false;
            Queue<TreeNode> q1 = new LinkedList<>();
            q1.offer(root);
            while(!q1.isEmpty()){
                TreeNode node = q1.poll();
                if(node.left == null && node.right == null && node.val == sum) return true;
                if(node.left != null) {node.left.val += node.val;q1.offer(node.left);}
                if(node.right != null) {node.right.val += node.val;q1.offer(node.right);}
            }
            return false;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    栈的方法:双栈

  • 相关阅读:
    数字时代的探索与革新:Socks5代理的引领作用
    排列组合C(n,m)和A(n,m)理解及代码实现
    Redis主从复制集群的介绍及搭建
    基于Anacoda搭建虚拟环境cudnn6.0+cuda8.0+python3.6+tensorflow-gpu1.4.0
    Web标准与前端开发| 青训营笔记
    FFmpeg入门详解之104:Win10快速安装OpenSSL(不用编译源码)
    leetcode(力扣) 59. 螺旋矩阵 II (边界控制思路)
    JS逆向爬虫---请求参数加密③【比特币交易爬虫】
    集合类不安全
    23.Spring Cloud + Spring Boot + Mybatis + Uniapp分布式、微服务、云架构企业快速开发架构之Shell 函数
  • 原文地址:https://blog.csdn.net/weixin_44236424/article/details/127841373