Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 이진 트리의 가장 빈번한 하위 트리 합계를 찾는 프로그램

<시간/>

이진 트리가 있다고 가정하고 가장 빈번한 하위 트리 합계를 찾아야 합니다. 노드의 하위 트리 합계는 실제로 노드 자체를 포함하여 노드 아래의 모든 값의 합계입니다.

따라서 입력이 다음과 같으면

Python에서 이진 트리의 가장 빈번한 하위 트리 합계를 찾는 프로그램

그러면 출력은 두 번 발생하므로 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