f(b)表示单分支结点数
f(b) = 0; b == NULL
f(b) = f(b->left) + f(b->right); b为单分支
f(b) = f(b->left) + f(b->right);
int getSingleSonNodes(Node* root)
{
if (root == NULL)
{
return 0;
}
else if (root->left == NULL && root->right != NULL
|| root->left != NULL && root->right == NULL)
{
return getSingleSonNodes(root->left)+getSingleSonNodes(root->right) + 1;
}
else
{
return getSingleSonNodes(root->left) + getSingleSonNodes(root->right);
}
PS:算法是基于 后序遍历。