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

Python에서 동일한 수준의 잎 데이터 합계의 곱셈 찾기


바이너리 트리가 있다고 가정합니다. 다음 작업을 수행해야 합니다 -

  • 각 수준에 대해 이 수준에 잎이 있는 경우 모든 잎의 합을 찾습니다. 그렇지 않으면 무시하십시오.

  • 모든 합계의 곱을 찾아 반환합니다.

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

Python에서 동일한 수준의 잎 데이터 합계의 곱셈 찾기

그러면 출력은 270이 됩니다. 처음 두 수준에는 잎이 없습니다. 세 번째 레벨에는 단일 리프 9가 있습니다. 마지막 레벨에는 4개의 리프 2, 12, 5 및 11이 있습니다. 따라서 결과는 9 * (2 + 12 + 5 + 11) =270입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 루트가 null이면

    • 0 반환

  • 해상도 :=1

  • que :=대기열

  • que의 끝에 루트 삽입

  • 무한히 하세요 -

    • no_of_nodes :=큐의 크기

    • no_of_nodes가 0과 같으면

      • 루프에서 나오다

    • sum_level :=0

    • found_leaf :=거짓

    • no_of_nodes> 0 동안 수행

      • curr_node :=que의 첫 번째 요소

      • curr_node가 잎이면

        • found_leaf :=참

        • sum_level :=sum_level + curr_node.data

      • que에서 첫 번째 요소 삭제

      • curr_node.left가 null이 아니면

        • que의 끝에 curr_node.left 삽입

      • curr_node.right가 null이 아니면

        • que의 끝에 curr_node.right 삽입

      • no_of_nodes :=no_of_nodes - 1

    • found_leaf가 참이면

      • res :=res * sum_level

  • 반환 해상도

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class TreeNode:
   def __init__(self, data):
      self.data = data
      self.left = self.right = None
def isLeaf(root) :
   return (not root.left and not root.right)
def find_res(root) :
   if (not root) :
      return 0
   res = 1
   que = []
   que.append(root)
   while (True):
      no_of_nodes = len(que)
   if (no_of_nodes == 0) :
      break
   sum_level = 0
   found_leaf = False
   while (no_of_nodes > 0) :
      curr_node = que[0]
      if (isLeaf(curr_node)) :
         found_leaf = True
         sum_level += curr_node.data
         que.pop(0)
         if (curr_node.left != None) :
            que.append(curr_node.left)
         if (curr_node.right != None) :
            que.append(curr_node.right)
         no_of_nodes -=1
      if (found_leaf) :
         res *= sum_level
   return res
root = TreeNode(8)
root.left = TreeNode(8)
root.right = TreeNode(6)
root.left.right = TreeNode(7)
root.left.left = TreeNode(9)
root.left.right.left = TreeNode(2)
root.left.right.right = TreeNode(12)
root.right.right = TreeNode(10)
root.right.right.left = TreeNode(5)
root.right.right.right = TreeNode(11)
print(find_res(root))

입력

root = TreeNode(8)
root.left = TreeNode(8)
root.right = TreeNode(6)
root.left.right = TreeNode(7)
root.left.left = TreeNode(9)
root.left.right.left = TreeNode(2)
root.left.right.right = TreeNode(12)
root.right.right = TreeNode(10)
root.right.right.left = TreeNode(5)
root.right.right.right = TreeNode(11)

출력

270