思路:如果直接遍历二叉树的话,没有用到完全二叉树的性质,但是看懂精选题解后,就时间复杂度而言,甚至递归or遍历二叉树效率更高;
//递归遍历
class Solution {
public:
int dfs(TreeNode *root)
{
if(root==NULL)
return -1;
else
return 2+dfs(root->right)+dfs(root->left);
}
int countNodes(TreeNode* root) {
return 1+dfs(root);
}
};
//层次遍历
int countNodes(TreeNode *root)
{
if (!root)
return 0;
queue<TreeNode *> q;
q.push(root);
int res = 0;
while (!q.empty())
{
int len = q.size();
res += len;
while (len--)
{
TreeNode *cur = q.front();
q.pop();
if (cur->left)
q.push(cur->left);
if (cur->right)
q.push(cur->right);
}
}
return res;
}