문제를 해결합니다. https://leetcode.com/problems/path-sum-iii/ 여기에 간략하게 언급 할 것입니다 : 총합 = 합계 인 이진 트리에서 경로 수를 찾습니다. 경로는 반드시 루트 (리프)에서 시작 (끝)하지 않아도됩니다. 경로가 아래로가는 한 유효한 경로로 간주되어야합니다. 여기 주어진 합계를 가진 이진 트리의 경로 수
내 솔루션입니다 :/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int pathSum(TreeNode root, int sum) {
int path = 0;
if(root.val == sum)
return 1;
else if(root.left == null && root.right == null)
return 0;
if(root.left != null){
path += pathSum(root.left, sum - root.val);
path += pathSum(root.left, sum);
}
if(root.right != null){
path += pathSum(root.right, sum - root.val);
path += pathSum(root.right, sum);
}
return path;
}
}
자신의 시스템에 따라 답은 3이지만, 나는 다음과 같은 입력을 4로 답을 얻고있다 :
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
10
/\
5 -3
/\ \
3 2 11
/\ \
3 -2 1
Return 3. The paths that sum to 8 are:
1. 5 -> 3
2. 5 -> 2 -> 1
3. -3 -> 11
나는 시간을 보냈다 노력했다 내 코드가 제대로 작동하지 않는 이유를 설명하기 위해 문제를 파악할 수는 없습니다. 순진한 질문에 대한 죄송합니다
:(하지만이 나를 죽이고
여기에서 '돌아 오는 1'을해야합니다. 그렇지 않으면 원치 않는 0을 세게됩니다. 'else if (root.val == sum) {return 1 + calcu (root.left, sum-root.val) + calcu (root.right, sum-root.val); }'. 합계 : 8, 완전히 왼쪽으로 비뚤어진 나무를 상상해보십시오. 10 -> 5 -> 3 -> 2 -> -2. 오른쪽 경로 5-> 3을 찾으면 재귀는 sum을 0으로 계산합니다.이 값은 2, -2로 만족되며 다른 경로로 계산됩니다. –
@Bandi Kishore no,'2 -> - 2'는 내 프로그램에서 받아 들여지지 않을 것입니다. 왜냐하면'continuous'가 아니기 때문입니다. 그리고'return 1'이라면 버그가 있습니다. 'Sum : 0, 완전히 왼쪽으로 비뚤어진 나무를 상상해보십시오. 0 -> 5 -> 5 -> 5 -> 2 -> 2 -> 2 일 경우, 'return 1'이라면 '0 -> 5 -> → 2 '. 이것은 우리가 원하는 것이 아닙니다. 그리고이 경우에는 '5 -> - 5'와 '2 -> - 2'는 내 코드가 루트 0으로 시작해야하며 '연속'이어야한다는 이유로 받아 들여지지 않습니다. –
아니요, 코드는 여전히 2 -> -2로 계산됩니다. 동일한 예 10 -> 5 -> 3 -> 2 -> -2를 고려하십시오. 그것이 노드 3에 도달하면,'root.val == sum'이 참임을 알기 때문에 왼쪽 노드가 2이고 합계가 0 인'calcu()'로 간다. 이제 다시'root.val == sum' false 인 경우 leftNode가 -2 인'calcu()'로 이동하고'(0- (Node 2) 0 = -2')로 합계합니다. 이제 다시 root.val == sum이 -2가됩니다 == -2'는 사실이므로 1을 반환합니다. 따라서 2와 2를 세게됩니다. 합계 "0"자체를 찾는 특수한 경우는 다른 방식으로 처리 될 수 있습니다. 그렇지 않으면 다른 경우를 엉망으로 만들 수 있습니다. . –