题目描述
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.
解题思路
本题采用的总体思想是深度优先遍历。但是对深度优先遍历进行了变化,首先处理了空树的问题;其次因为要每次使用到所有祖先的和值,采用了减法的策略。
自己的代码
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.
解题思路
本题采用的总体思想是深度优先遍历。但是对深度优先遍历进行了变化,首先处理了空树的问题;其次因为要每次使用到所有祖先的和值,采用了减法的策略。
自己的代码
package leetcode;
/*public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}*/
public class PathSum {
public boolean hasPathSum(TreeNode root, int sum) {
//处理空树的情况
if(root == null) return false;
else{
sum = sum - root.val;
if(root.left == null && root.right == null && sum == 0) return true;
else {
if(root.left != null){
if(hasPathSum(root.left, sum)) return true;
}
if(root.right != null){
if(hasPathSum(root.right, sum)) return true;
}
}
}
return false;
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode(5);
TreeNode node2 = new TreeNode(4);
TreeNode node3 = new TreeNode(8);
TreeNode node4 = new TreeNode(11);
TreeNode node5 = new TreeNode(13);
TreeNode node6 = new TreeNode(4);
TreeNode node7 = new TreeNode(7);
TreeNode node8 = new TreeNode(2);
TreeNode node9 = new TreeNode(1);
node1.left = node2;
node1.right = node3;
node2.left = node4;
node3.left = node5;
node3.right = node6;
node4.left = node7;
node4.right = node8;
node6.right = node9;
/*node9.left = node8;*/
int sum = 22;
//int sum = 10000;
/*int sum = 1;*/
PathSum ps = new PathSum();
System.out.println(ps.hasPathSum(node1, sum));
//System.out.println(ps.hasPathSum(node9, sum));
}
}