2 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
既然都能寫遍歷的程序,你只要設(shè)置一個(gè)全局的變量count,在遍歷的時(shí)候遇到葉子節(jié)點(diǎn)加1就成啊,至于怎么判斷葉子結(jié)點(diǎn)就是判斷他的左右子節(jié)點(diǎn)是否都為NULL就可以了

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
int LeafCountResc(BiTreeNode *tree)
{ //遞歸實(shí)現(xiàn)二叉樹的遍歷統(tǒng)計(jì)葉子數(shù)
BiTreeNode *t = tree;
int total = 0;
if(!t) return 0;
//如果已經(jīng)是葉子,則返回1
//作為調(diào)試,打印葉子值
if(!t->leftchild && !t->rightchild )
{printf("%c ", t->data); return 1;}
//否則分別統(tǒng)計(jì)左子樹和右子樹的葉子數(shù)量
total += LeafCount(t->leftchild);
total += LeafCount(t->rightchild);
return total;
}
void LeafCountLoop(BiTreeNode *t)
/*非遞歸實(shí)現(xiàn)二叉樹的前序遍歷, 統(tǒng)計(jì)葉子數(shù)*/
{
int n = 0;
seqstack s;
s.top=-1;
while ((t) || (s.top!=-1))
/*當(dāng)前處理的子樹不為空或棧不為空則循環(huán)*/
{
while (t)
{
printf("%c",t->data);
if(t->rightchild)
{
s.top++;
s.data[s.top]=t;
}
//左右子樹都為空則計(jì)數(shù)
else if(!t->leftchild){n++; printf("_");}
t=t->leftchild;
}
if (s.top>-1)
{
t=pop(&s);
t=t->rightchild;
}
}
printf("\nLeaf count=%d\n",n);
}
添加回答
舉報(bào)