(好好复习是王道)
分析:简单题——将bst树构造出来,然后给每个节点打上高度。最后求出树的高度。然后count树高的节点数加上树高节点数-1就ok了
1 #include <iostream> 2 #include <cstdio> 3 4 #define MAXN 1003 5 using namespace std; 6 typedef struct Node{ 7 int key,hight; 8 int left,right; 9 }Node; 10 11 Node node[MAXN]; 12 int solve_hight[MAXN]; 13 int main() 14 { 15 int n,index1,index2,max,a,b; 16 scanf("%d",&n); 17 18 scanf("%d",&node[0].key); 19 node[0].left=node[0].right=-1; 20 for(int i=1;i<n;i++){ 21 scanf("%d",&node[i].key); 22 node[i].left=node[i].right=-1; 23 int j=0; 24 while(1){ 25 if(node[i].key>node[j].key) 26 if(node[j].right!=-1) 27 j=node[j].right; 28 else 29 { 30 node[j].right=i; 31 break; 32 } 33 else 34 if(node[j].left!=-1) 35 j=node[j].left; 36 else 37 { 38 node[j].left=i; 39 break; 40 } 41 } 42 } 43 index1=index2=0; 44 solve_hight[index2++]=0; 45 node[0].hight=1; 46 while(index1!=index2){ 47 if(node[index1].left!=-1){ 48 solve_hight[index2++]=node[index1].left; 49 node[node[index1].left].hight=node[index1].hight+1; 50 } 51 if(node[index1].right!=-1){ 52 solve_hight[index2++]=node[index1].right; 53 node[node[index1].right].hight=node[index1].hight+1; 54 } 55 index1++; 56 } 57 58 a=b=max=0; 59 for(int i=0;i<n;i++){ 60 if(node[i].left==-1&&node[i].right==-1&&node[i].hight>max)max=node[i].hight; 61 } 62 for(int i=0;i<n;i++){ 63 if(max==node[i].hight)a++; 64 if(max-1==node[i].hight)b++; 65 } 66 printf("%d + %d = %d\n",a,b,a+b); 67 68 return 0; 69 }