이진 트리와 다른 값 k가 있다고 가정하고 하위 자식 경로에 대한 고유한 노드의 수를 찾아야 하며 합계는 k입니다.
따라서 입력이 다음과 같으면
k =5이면 경로가 [2, 3] 및 [1, 4]
이므로 출력은 2가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- count :=지도는 처음에 키 0에 대해 값 1을 보유합니다.
- ans :=0, 접두사 :=0
- dfs() 함수를 정의합니다. 노드가 필요합니다.
- 노드가 null이 아니면
- 접두사 :=접두사 + 노드 값
- ans :=ans + (count[prefix - target], 사용할 수 없는 경우 0이 됨)
- 개수[접두사] :=개수[접두사] + 1
- dfs(노드 왼쪽)
- dfs(노드 오른쪽)
- 개수[접두사] :=개수[접두사] - 1
- 접두사 :=접두사 - 노드 값
- 기본 방법에서 다음을 수행합니다.
- dfs(루트)
- 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from collections import Counterclass TreeNode:def __init__(self, data, left =None, right =None):self.val =data self.left =left self.right =rightclass 솔루션:def solve(self, root, target ):count =Counter([0]) ans =prefix =0 def dfs(node):nonlocal ans, prefix if node:prefix +=node.val ans +=count[prefix - target] count[prefix] +=1 dfs(node.left) dfs(node.right) count[접두사] -=1 접두사 -=node.val dfs(root) return ans ob =Solution()root =TreeNode(3)root.left =TreeNode(2) root.right =TreeNode(4)root.right.left =TreeNode(1)root.right.left.right =TreeNode(2)k =5print(ob.solve(root, k))
입력
루트 =TreeNode(3)root.left =TreeNode(2)root.right =TreeNode(4)root.right.left =TreeNode(1)root.right.left.right =TreeNode(2)5사전>출력
2