给定一棵二叉树和一个和,判断从树的根结点到叶子结点的全部结点的和是否等于给定的和,若是等于,就返回true,不然返回false。node
对树进行遍历,而且使用回溯法进行求解。算法
树结点类spa
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
算法实现类.net
public class Solution { private boolean stop = false; // 判断是否已经找到答案 public boolean hasPathSum(TreeNode root, int sum) { calculate(root, 0, sum); return stop; } /** * 计算根到叶子结点的和 * @param node 当前处理的节点 * @param cur 从根节点到当前结点以前的全部节点和 * @param sum 要求的和 */ private void calculate(TreeNode node, int cur, int sum) { if (!stop && node != null) { // 尚未找到答案,而且要处理的节点不为空 // 若是是叶节点,就检查从根到当前叶节点的和是否为sum,若是是就说明已经找到,改变stop if (node.left == null && node.right == null && (node.val + cur == sum) ) { stop = true; } // 若是是非叶节点,继续处理 if (node.left != null) { calculate(node.left, cur + node.val, sum); } if (node.right != null) { calculate(node.right, cur + node.val, sum); } } } }