求葉子結(jié)點(diǎn)的個(gè)數(shù)代碼 二叉樹求葉子結(jié)點(diǎn)個(gè)數(shù)的算法(遞歸遍歷)?
二叉樹求葉子結(jié)點(diǎn)個(gè)數(shù)的算法(遞歸遍歷)?Int BTREE depth(BT->lchild){//find the depth of binary tree if(BT==null)//empt
二叉樹求葉子結(jié)點(diǎn)個(gè)數(shù)的算法(遞歸遍歷)?
Int BTREE depth(BT->lchild){//find the depth of binary tree if(BT==null)//empty tree returns 0return 0else{Int dep1=BTREE depth(BT->lchild)//遞歸調(diào)用逐層分析Int dep2=BTREE depth(BT->rchild)if(dep1>dep2)return dep2 1}}Int leave(bitnode*BT){//find二叉樹中的葉節(jié)點(diǎn)數(shù)if(BT==null)返回0else{if(BT->lchild==null)&這是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的練習(xí)。它使用遞歸形式。理解的時(shí)候需要考慮一下,但是函數(shù)相對(duì)簡單。
設(shè)計(jì)算法統(tǒng)計(jì)一棵二叉樹中所有葉子結(jié)點(diǎn)的數(shù)目及非葉子節(jié)點(diǎn)的數(shù)目?
這應(yīng)該是一個(gè)二叉樹遍歷問題。您可以選擇前序遍歷、中序遍歷和后序遍歷。當(dāng)一個(gè)節(jié)點(diǎn)沒有左節(jié)點(diǎn)和右節(jié)點(diǎn)時(shí),意味著它是一個(gè)葉節(jié)點(diǎn)。當(dāng)節(jié)點(diǎn)有子節(jié)點(diǎn)時(shí),它不是葉節(jié)點(diǎn)。至于輸出,可以先遍歷統(tǒng)計(jì)信息,然后分別輸出葉節(jié)點(diǎn)和非葉節(jié)點(diǎn)。也可以在遍歷時(shí)輸出節(jié)點(diǎn)并指示節(jié)點(diǎn)類型。
數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)——統(tǒng)計(jì)二叉樹葉子結(jié)點(diǎn)的個(gè)數(shù),并輸出結(jié)果?
引用:
intnolefcount(node*t)/*查找二叉樹中的非葉節(jié)點(diǎn)數(shù)*/]{
if(!T)
return0/*空樹沒有葉子*/
elseif(!T->lchild&T->rchild)
return0/*葉節(jié)點(diǎn)*/
else
統(tǒng)計(jì)二叉樹中葉子結(jié)點(diǎn)的個(gè)數(shù)?
引用算法如下:計(jì)算當(dāng)前節(jié)點(diǎn)中的葉節(jié)點(diǎn)數(shù)二叉樹。由于葉節(jié)點(diǎn)是二叉樹中左、右子節(jié)點(diǎn)不存在的節(jié)點(diǎn),可以在二叉樹遍歷過程中對(duì)這些特殊節(jié)點(diǎn)進(jìn)行計(jì)數(shù),完成葉節(jié)點(diǎn)數(shù)的統(tǒng)計(jì)。這個(gè)統(tǒng)計(jì)可以在任何遍歷模式下給出。下面的算法是用中間順序遍歷實(shí)現(xiàn)的:/****function:計(jì)算葉節(jié)點(diǎn)數(shù)input:二叉樹的根節(jié)點(diǎn)output:葉節(jié)點(diǎn)數(shù)**/intcountleaf(BiTree*P){staticintcount=0//注意這里如果是靜態(tài)變量,如果(P!=null){count=countleaf(P->lchild)如果((P->lchild==null)&(P->rchild==null))count=count 1count=countleaf(P->rchild)}return}
讓節(jié)點(diǎn)號(hào)為n(總是奇數(shù)),葉節(jié)點(diǎn)號(hào)為m,那么
m=(n1)/2
n=m*2-1