Leetcode-112 Path Sum

来源:互联网 发布:java实现ftp断点续传 编辑:程序博客网 时间:2024/05/21 07:35

问题描述

地址:https://leetcode.com/problems/path-sum/#/description
描述:
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.
翻译:
给出一个二叉树和一个特定的值sum,判断是否有从 根节点到叶子节点的路径,使得所有路径上节点的和与sum相等。

问题解析

解这个题需要注意下面的问题:
(1)维持一个变量,可以记录到达当前节点时已经走过的所有节点上数字的和;
(2)一旦遇到 节点值的和=sum即可返回,不需要遍历完所有的节点;
(3)注意给出的条件是根节点到叶子节点的和。

解析代码I

 public boolean hasPathSum(TreeNode root, int sum) {      if(root == null){            return false;        }        if(root.val == sum && root.left== null && root.right == null){            return true;        }        return hasPathSum(root, 0, sum);    }   public boolean hasPathSum(TreeNode root, int count, int sum) {        if(root == null){            return false;        }        count += root.val;        if( count == sum && root.left == null && root.right == null){            return true;        }        if(root.left != null  && hasPathSum(root.left,count, sum)){            return true;        }        if(root.right != null && hasPathSum(root.right,count, sum)){            return true;        }        return false;    }

解析代码II

public class PathSum{    int count = 0;    public boolean hasPathSumII(TreeNode root, int sum){            if(root == null){                return false;            }            count += root.val;            if(count == sum && root.left == null && root.right == null){                return true;            }            if(hasPathSumII(root.left, sum)){                return true;            }            if(hasPathSumII(root.right, sum)){                return true;            }            count -= root.val;            return false;        }    }
0 0
原创粉丝点击