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);
            }
        }
    }
}
相關文章
相關標籤/搜索