变量简洁正确完整思路 dfs,形参root,计算出完全二叉树root的节点数,只要算出左右子树的节点数,+1就行了,空节点提前返回0,但是对于root树,root最后一层的最后一个root存在,则可以利用公式return 1<<height-1,因此对于root树是满的应利用公式,判断方法是left =left->left,right=right->right,height++,判断leftright同时为空 class Solution { public: int countNodes(TreeNode* root) { return dfs(root); } int dfs(TreeNode*root){ if(!root)return 0; int height=1; TreeNode*left=root->left,*right=root->right; while(left&&right){ height++; left=left->left; right=right->right; } if(!left)return (1<<height)-1; return 1+dfs(root->left)+dfs(root->right); } }; 踩过的坑 1<<n 是2^n 2<<n 是2*2^n