(Tree) Path Sum
07 Nov 2019 | algorithm programming leetcode트리를 DFS로 탐색하며 최대 합인 패스의 개수를 찾는 문제이다.
class Solution {
int result = 0;
private void traverse(TreeNode root, int s, List<TreeNode> nodes) {
if (root == null) {
return;
}
// System.out.println(root.val);
for (int i = 0; i < nodes.size(); i++) {
int sum = 0;
for (int j = i; j < nodes.size(); j++) {
sum += nodes.get(j).val;
}
if (sum == s) {
result++;
}
}
nodes.add(root.left);
traverse(root.left, s, nodes);
nodes.remove(root.left);
nodes.add(root.right);
traverse(root.right, s, nodes);
nodes.remove(root.right);
}
public int pathSum(TreeNode root, int sum) {
List<TreeNode> nodes = new ArrayList<>();
nodes.add(root);
traverse(root, sum, nodes);
// traverse();
return result;
}
}
위의 방법은 시간복잡도가 좋지 않으니 아래처럼 구현하면 좋다.
class Solution {
public int pathSum(TreeNode root, int sum) {
if(root == null)
return 0;
return traverse(root, sum, 0) + pathSum(root.left, sum) + pathSum(root.right, sum);
}
private int traverse(TreeNode root, int sum, int currentSum) {
if(root == null)
return 0;
if(currentSum + root.val == sum)
return 1 + traverse(root.left, sum, currentSum+root.val)
+ traverse(root.right, sum, currentSum+root.val);
else
return traverse(root.left, sum, currentSum+root.val)
+ traverse(root.right, sum, currentSum+root.val);
}
}