Simple question. Statistics can be a bit.
#include <cstdio>#include<cstring>#include<cmath>#include<vector>#include<map>#include<queue>#include<stack>#include<algorithm>using namespacestd;Const intmaxn=100000+Ten;structnode{intLeft ; intRight ; intVal; intDEP;} S[MAXN];intN;intA[MAXN];intmax_dep,n1,n2;voidDfsintXintDEP) {MAX_DEP=Max (MAX_DEP,DEP); S[X].DEP=DEP; if(s[x].left!=-1) DFS (s[x].left,dep+1); if(s[x].right!=-1) DFS (s[x].right,dep+1);}voidDFS (intx) { if(S[X].DEP==MAX_DEP) n1++; Else if(s[x].dep==max_dep-1) n2++; if(s[x].left!=-1) DFS (s[x].left); if(s[x].right!=-1) DFS (s[x].right);}intMain () {scanf ("%d",&N); if(n==0) printf ("0 + 0 = 0\n"); Else { for(intI=1; i<=n; i++) scanf ("%d",&A[i]); for(intI=0; i<=n; i++) s[i].left=s[i].right=-1; intId=0; S[id++].val=a[1]; for(intI=2; i<=n; i++) { intnow=0; while(1) { if(a[i]<=s[now].val) { if(s[now].left!=-1) now=S[now].left; Else{s[now].left=ID; S[id++].val=A[i]; Break; } } Else { if(s[now].right!=-1) now=S[now].right; Else{s[now].right=ID; S[id++].val=A[i]; Break; } }}} MAX_DEP=n1=n2=0; DFS (0,1); DFS (0); printf ("%d +%d =%d\n", n1,n2,n1+n2); } return 0;}
PAT (Advanced level) 1115. Counting Nodes in a BST (30)