#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int main(void) { int n; printf("請輸入需要輸入的整數的數量:"); scanf("%d", &n); // 確定深度 in ...
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int main(void) { int n; printf("請輸入需要輸入的整數的數量:"); scanf("%d", &n); // 確定深度 int count = 0, deep = 0; while(count < n) { deep++; count += pow(2.0, (deep - 1)); } // 創建數組 int **tree; tree = (int **)malloc((deep + 1) * sizeof(int *)); for (int i = 0; i < deep + 1; i++) { tree[i] = (int *)malloc((deep + 1) * sizeof(int)); memset(tree[i], 0, (deep + 1) * sizeof(int)); } // 將輸入的值讓完全二叉樹的規則輸入數組 count = 0; for(int temp_deep = 1; temp_deep <= deep; temp_deep++) { for(int i = 1; i <= pow(2.0, temp_deep - 1); i++) { scanf("%d", &tree[temp_deep][i]); count++; if(count >= n) break; // 當所有元素寫入之後推出輸入迴圈 } } // 比較同一深度的節點權值之和 int max_deep = 0, max_sum = 0; for(int temp_deep = 1; temp_deep <= deep; temp_deep++) { int sum = 0; for(int i = 1; i <= pow(2.0, temp_deep - 1); i++) { sum += tree[temp_deep][i]; } if(sum > max_sum) { max_sum = sum; max_deep = temp_deep; } } printf("深度為 %d 的節點權值之和最大\n", max_deep); printf("\n"); system("pause"); }