給定一棵二叉樹和一個和,判斷從樹的根結點到葉子結點的全部結點的和是否等於給定的和,若是等於,就返回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); } } } }