题目地址:https://leetcode.com/problems/path-sum/
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.
这类型题目一般用递归写还是比较简单的,边界条件就是当前节点为叶子节点,如果当前节点的val与递归的当前sum一样大了,那么就是说这个树存在和等于sum的路径。
public class PathSum {
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null)
return false;
if (root.left == null && root.right == null && root.val == sum)
return true;
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}
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;
PathSum pathSum = new PathSum();
System.out.println(pathSum.hasPathSum(node1, 22));
}
}
该算法的时间复杂度与树的形状有关,最差的情况就是退化树,最好当然就是平衡树了。