• 【LeetCode】Path Sum


    称号

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

    For example:
    Given the below binary tree and sum = 22,
                  5
                 / 
                4   8
               /   / 
              11  13  4
             /        
            7    2      1
    

    return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

    解答

    1.利用递归解答,每递归一次减去当前节点的值。直到节点的左右子节点为空。

    注意:sum的值是根到叶子的和,一定要到叶子

    2.迭代法,bfs问题,运用两个队列分别存节点值和节点的和,当当前节点的左右节点都为空,而且和等于给定值时,返回true

    代码例如以下:

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public boolean hasPathSum(TreeNode root, int sum) {
            if(root==null){
                return false;
            }
            if(root.left==null&&root.right==null&&sum-root.val==0){  //注意要同一时候有根节点到叶节点的路径,仅仅有根节点是不符合要求的
                return true;
            }
            boolean bl=false;
            boolean br=false;
            if(root.left!=null){
                bl=hasPathSum(root.left,sum-root.val);
            }
            if(root.right!=null){
                br=hasPathSum(root.right,sum-root.val);
            }
            return bl||br;
        }
    }
    //迭代法
    public boolean hasPathSum(TreeNode root,int sum){
        if(root==null){
          return false;
        }
        Queue<TreeNode> nodes=new LinkedList<TreeNode>();
        Queue<Integer> values=new LinkedList<Integer>();
    
        nodes.add(root);
        values.add(root.val);
    
        while(!nodes.isEmpty()){
          TreeNode cur=nodes.poll();
          int sumVal=values.poll();
    
          if(cur.left==null&&cur.right==null&&sumVal==sum){
            return true;
          }
    
          if(cur.left!=null){
            nodes.add(cur.left);
            values.add(sumVal+cur.left.val);
          }
    
          if(cur.right!=null){
            nodes.add(cur.right);
            values.add(sumVal+cur.right.val);
          }
        }
        return false;
    }


    ---EOF---

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    ab命令做压测测试
    用js两张图片合并成一张图片
    Web全景图的原理及实现
    深入理解Java中的IO
    Spring AOP详解
    spring @Transactional注解参数详解
    优化MyBatis配置文件中的配置
    使用MyBatis对表执行CRUD操作
    @requestBody注解的使用
    url 拼接的一个模块furl
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4616852.html
Copyright © 2020-2023  润新知