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 countNodes(TreeNode* root) {
return cntNodes(root, -1, -1);
}
int cntNodes(TreeNode* root, int ld, int rd) {
if (!root) return 0;
if (ld == -1)
ld = ldepth(root);
if (rd == -1)
rd = rdepth(root);
if (ld == rd)
return pow(2, ld) - 1;
else
return 1 + cntNodes(root->left, ld-1, -1) + cntNodes(root->right, -1, rd-1);
}
int ldepth(TreeNode* root){
if (!root) return 0;
int ret = 1;
while (root->left) ret ++, root = root->left;
return ret;
}
int rdepth(TreeNode* root) {
if (!root) return 0;
int ret = 1;
while (root->right) ret++, root = root->right;
return ret;
}
};