很多書上其實都有提到和該算法。但是經過自己的學習我自己想到一個算法。算是結合了其中的優點吧。
- 算法描述:該算法遞歸去統計結點個數。值得一提的是該系列算法都是統計根結點以下的符和條件的結點的個數進行了加和。免去的設定全局變量和void的類型的函數。
int CountNodes(LBTree* lbt)
{
int n = 0;
if (lbt != NULL)
{
++n;
n += CountNodes(lbt->lchild);
n += CountNodes(lbt->rchild);
}
return n;
}
int CountLeaves(LBTree* lbt)
{
int n = 0;
if (lbt != NULL)
{
if (lbt->lchild == NULL && lbt->rchild == NULL)
++n;
n += CountLeaves(lbt->lchild);
n += CountLeaves(lbt->rchild);
}
return n;
}
int CountSingleNode(LBTree* lbt)
{
int n = 0;
if (lbt != NULL)
{
if ((lbt->lchild == NULL && lbt->rchild != NULL) || (lbt->rchild == NULL && lbt->lchild != NULL))
++n;
n += CountSingleNode(lbt->lchild);
n += CountSingleNode(lbt->rchild);
}
return n;
}
int CountDoubleNode(LBTree* lbt)
{
int n = 0;
if (lbt != NULL)
{
if (lbt->lchild != NULL && lbt->rchild != NULL)
++n;
n += CountDoubleNode(lbt->lchild);
n += CountDoubleNode(lbt->rchild);
}
return n;
}
