바이너리 트리가 있다고 가정합니다. 다음 작업을 수행해야 합니다 -
-
각 수준에 대해 이 수준에 잎이 있는 경우 모든 잎의 합을 찾습니다. 그렇지 않으면 무시하십시오.
-
모든 합계의 곱을 찾아 반환합니다.
따라서 입력이 다음과 같으면
그러면 출력은 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