https://leetcode.com/problems/count-complete-tree-nodes/description/
简单的二分法分治,探测(子)树的左右侧是否相等即可。
(下面代码没实现)想要更快的话,其实自从第一次算出左侧的深度后,后面的左测深度直接可以通过减法求出,不用再去探测一次了。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int countLevel(TreeNode* root, bool to_left) { int count = 0; while (root != nullptr) { count++; root = to_left ? root->left : root->right; } return count; } int countNodes(TreeNode* root) { if (root == nullptr) return 0; int lvl_left = countLevel(root, true); int lvl_right = countLevel(root, false); if (lvl_left == lvl_right) { // finally return (1 << lvl_left) - 1; // 2^n - 1 } else { return 1 + countNodes(root->left) + countNodes(root->right); } } };