완전한 이진 트리의 수준 수를 나타내는 양의 정수 L이 있다고 가정합니다. 이 완벽한 이진 트리의 리프 노드는 1에서 n까지 번호가 매겨집니다. 여기서 n은 리프 노드의 수입니다. 부모 노드는 자식의 합입니다. 우리의 임무는 이 완벽한 이진 트리의 모든 노드의 합을 출력하는 프로그램을 작성하는 것입니다. 트리가 아래와 같다면 -
따라서 총합은 30입니다.
더 자세히 보면 모든 노드의 합을 찾아야 합니다. 리프 노드는 1에서 n까지의 값을 보유하므로 n(n+1)/2 공식을 사용하여 리프 노드의 합계를 얻을 수 있습니다. 완전 이진 트리이므로 각 수준의 합은 동일합니다. 따라서 마지막 레벨의 합계를 구한 다음 레벨 수를 곱하십시오.
예시
#include<iostream> #include<cmath> using namespace std; int treeSum(int level) { int total_leaves = pow(2, level - 1); int leaf_sum = 0; leaf_sum = (total_leaves * (total_leaves + 1)) / 2; int sum = leaf_sum * level; return sum; } int main() { int levels = 4; cout << "Sum of all nodes for a perfect binary tree with level " << levels << " is: " << treeSum(levels); }
출력
Sum of all nodes for a perfect binary tree with level 4 is: 144