二叉排序樹的應用之——資料結構實驗之查詢三:樹的種類統計
阿新 • • 發佈:2019-01-13
注意:中序遍歷二叉樹時,只能在樹不為空的時候才能進行遞迴呼叫!
資料結構實驗之查詢三:樹的種類統計
Time Limit: 400 ms Memory Limit: 65536 KiB
Problem Description
隨著衛星成像技術的應用,自然資源研究機構可以識別每一個棵樹的種類。請編寫程式幫助研究人員統計每種樹的數量,計算每種樹佔總數的百分比。
Input
輸入一組測試資料。資料的第1行給出一個正整數N (n <= 100000),N表示樹的數量;隨後N行,每行給出衛星觀測到的一棵樹的種類名稱,樹的名稱是一個不超過20個字元的字串,字串由英文字母和空格組成,不區分大小寫。
Output
按字典序輸出各種樹的種類名稱和它佔的百分比,中間以空格間隔,小數點後保留兩位小數。
Sample Input
2 This is an Appletree this is an appletree
Sample Output
this is an appletree 100.00%
Hint
Source
xam
#include<bits/stdc++.h> using namespace std; struct node { char name[21]; int dp; struct node *lchild, *rchild; }*head; struct node *buildtree(struct node *head, char w[]) { if(!head) { head = new struct node; head-> dp = 1; strcpy(head-> name, w); head-> lchild = head-> rchild = NULL; } else { if(strcmp(head-> name, w) > 0) { head-> lchild = buildtree(head-> lchild, w); } else if(strcmp(head-> name, w) < 0) { head-> rchild = buildtree(head-> rchild, w); } else { head-> dp++; } } return head; } void inorder(struct node *head, int n) { if(head) { inorder(head-> lchild, n); printf("%s %.2lf%%\n", head-> name, (100 * (double) head-> dp) / n); inorder(head-> rchild, n); } } int main(void) { int n, i, j, m; char w[21]; scanf("%d", &n); getchar(); head = NULL; for(j = 0; j < n; j++) { gets(w); m = strlen(w); for(i = 0; i < m; i++) { if(w[i] >= 'A' && w[i] <= 'Z') { w[i] += 32; } } head = buildtree(head, w); } inorder(head, n); return 0; }