이진 트리가 있다고 가정하고 가장 빈번한 하위 트리 합계를 찾아야 합니다. 노드의 하위 트리 합계는 실제로 노드 자체를 포함하여 노드 아래의 모든 값의 합계입니다.
따라서 입력이 다음과 같으면
그러면 출력은 두 번 발생하므로 3이 됩니다. 한 번은 왼쪽 잎으로, 한 번은 3 - 6 + 6의 합으로 한 번입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- count :=빈 지도
- getSum() 함수를 정의합니다. 노드가 필요합니다.
- 노드가 null이면
- 0을 반환
- mySum :=getSum(노드 왼쪽) + getSum(노드 오른쪽) + 노드 값
- count[mySum] :=count[mySum] + 1
- mySum 반환
- 기본 방법에서 다음을 수행합니다.
- getSum(루트)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from collections import defaultdictclass TreeNode:def __init__(self, data, left =None, right =None):self.val =data self.left =left self.right =rightclass 솔루션:def solve(self, root):count =defaultdict(int) def getSum(node):노드가 아닌 경우:0 반환 mySum =getSum(node.left) + getSum(node.right) + node.val count[mySum] +=1 return mySum getSum(root) return max(count, key=count.get)ob =Solution()root =TreeNode(-6)root.left =TreeNode(3)root.right =TreeNode(6) print(ob.solve(root))사전>입력
루트 =TreeNode(-6)root.left =TreeNode(3)root.right =TreeNode(6)출력
3