題目一
//計算一顆二叉樹的所有節點的數量,可以採用遞迴實現
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;
}
題目二
//計算一顆二叉樹的所有葉子節點的數量,可以採用遞迴實現
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;
}
題目三