Path Sum(路径和)

题目大意

  给定一棵二叉树和一个和,判断从树的根结点到叶子结点的全部结点的和是否等于给定的和,若是等于,就返回true,不然返回false。node

解题思路

  对树进行遍历,而且使用回溯法进行求解。算法

代码实现

树结点类spa

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

算法实现类.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);
            }
        }
    }
}
相关文章
相关标签/搜索