C++數據結構二叉樹統計總結點個數,葉子結點個數,單分支結點個數,雙分支結點個數。

      很多書上其實都有提到和該算法。但是經過自己的學習我自己想到一個算法。算是結合了其中的優點吧。

  • 算法描述:該算法遞歸去統計結點個數。值得一提的是該系列算法都是統計根結點以下的符和條件的結點的個數進行了加和。免去的設置全局變量和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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章