zoukankan      html  css  js  c++  java
  • 【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---

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

  • 相关阅读:
    echarts数据包坐标拾取工具
    JS 多个条件判断
    js 实现各浏览器全屏
    前端统计使用插件
    JS 随机排序算法
    js中布尔值为false的六种情况
    Mosaic
    单点登录
    JavaScript数据结构和算法
    一个普通函数的冷僻属性(length、caller、arguments、name、[[Scopes]]和[[FunctionLocation]])
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4616852.html
Copyright © 2011-2022 走看看