完全樹和滿樹的區(qū)別就在于最下面一層的葉子節(jié)點(diǎn)香椎,完全樹不是滿的
當(dāng)左右子樹高度相同的時(shí)候,說明左子樹是滿樹禽篱,所有節(jié)點(diǎn)就是1<<l + root->right 完全數(shù)的節(jié)點(diǎn)
當(dāng)左小于右子樹高度的時(shí)候畜伐,說明右子樹是滿樹,所有節(jié)點(diǎn)就是1<<r + root->left 完全數(shù)的節(jié)點(diǎn)
int depth(struct TreeNode *root)
{
#if 0
if(root == NULL)
return 0;
int l = depth(root->left);
int r = depth(root->right);
return (l>r?l:r)+1;
#else
int h = 0;
while(root){
root = root->left;
h++;
}
return h;
#endif
}
int countNodes(struct TreeNode* root) {
if(root == NULL)
return 0;
int l = depth(root->left);
int r = depth(root->right);
if(l == r)
return (1<<l) + countNodes(root->right);
else
return (1<<r) + countNodes(root->left);
}