二叉樹(資料結構)——利用“遞迴”思想實現相關演算法問題

沉舟道人發表於2024-05-01

題目一

//計算一顆二叉樹的所有節點的數量,可以採用遞迴實現
int BinaryTree_CountNode(Tnode_t *root)
{
	int n1,n2; //n1用於記錄左子樹的節點,n2用於記錄右子樹的節點

	//遞迴函式先提前寫好終止條件
	if (NULL == root)
	{
		return 0;
	}

	//假設採用後序遍歷來計算二叉樹的節點數量
	n1 = BinaryTree_CountNode(root->lchild);
	n2 = BinaryTree_CountNode(root->rchild);

	return n1+n2+1;
}

題目二
image

//計算一顆二叉樹的所有葉子節點的數量,可以採用遞迴實現
int BinaryTree_CountLeafNode(Tnode_t *root)
{
	int n1,n2; //n1記錄左子樹葉子節點,n2記錄右子樹葉子結點

	//1.遞迴函式必須提前寫好終止條件
	if (NULL == root)
	{
		//說明是空樹,則直接返回0
		return 0;
	}
	else if(root->lchild == NULL && root->rchild == NULL)
	{
		//說明只有一個根節點,則根節點就是葉子節點
		return 1;
	}
	else
	{
		//說明是有子樹的二叉樹,則需要計算左子樹的葉子節點和右子樹的葉子節點
		n1 = BinaryTree_CountLeafNode(root->lchild);
		n2 = BinaryTree_CountLeafNode(root->rchild);
	}

	return n1+n2;
}

題目三
image

相關文章