My C Solution | 100%
Code\n\n/**\n * Definition for a binary tree node.\n * struct TreeNode {\n *     int val;\n *     struct TreeNode *left;\n *     struct TreeNode *right;\n * };\
# Code\n```\n/**\n * Definition for a binary tree node.\n * struct TreeNode {\n *     int val;\n *     struct TreeNode *left;\n *     struct TreeNode *right;\n * };\n */\nstruct data{\n    int tot;\n    int cnt;\n};\ntypedef struct data data;\n\ndata postorder(struct TreeNode* root, int* pCnter){\n    data rslt;\n    rslt.tot = 0;\n    rslt.cnt = 0;\n    if(!root) return rslt;\n    if(root->left){\n        data leftData = postorder(root->left,pCnter);\n        rslt.tot += leftData.tot;\n        rslt.cnt += leftData.cnt;\n    }\n    if(root->right){\n        data rightData = postorder(root->right,pCnter);\n        rslt.tot += rightData.tot;\n        rslt.cnt += rightData.cnt;\n    }\n    rslt.tot += root->val;\n    rslt.cnt++;\n    if(rslt.tot/rslt.cnt == root->val) ++*pCnter;\n    return rslt;\n}\n\nint averageOfSubtree(struct TreeNode* root){\n    int cnter = 0;\n    data rslt = postorder(root,&cnter);\n    return cnter;\n}\n```
['Depth-First Search', 'Recursion', 'C', 'Binary Tree']