凡是對(duì)二叉樹(shù)中各結(jié)點(diǎn)進(jìn)行一次處理的問(wèn)題,都可以用遍歷算法來(lái)完成。
1.利用遍歷算法對(duì)二叉樹(shù)中各類結(jié)點(diǎn)計(jì)數(shù)
設(shè)二叉樹(shù)中出度=0、1、2的結(jié)點(diǎn)數(shù)分別為n0、 n1 和n2 ,初值均為0。
套用遍歷算法(前序、中許、后序均可),掃描到樹(shù)中某p結(jié)點(diǎn)時(shí),若:
if ((p->Lchild==NULL)&&(p->Rchild==NULL))
n0++; //p為葉子//
else if((p->Lchild)&&(p->Rchild))
n2++; //p為出度=2的結(jié)點(diǎn)//
else n1++; // p為出度=1的結(jié)點(diǎn)//
如:只要把遍歷算法在遍歷時(shí)稍微改變一下。
n0=n1=n2=0;
void preorder( BTptr T) //對(duì)當(dāng)前根結(jié)點(diǎn)指針為T(mén)的二叉樹(shù)按前序遍歷//
{if (T) { // visit(T); 訪問(wèn)T所指結(jié)點(diǎn) //
if ((T->Lchild==NULL)&&(T->Rchild==NULL))
n0++; //p為葉子//
else if((T->Lchild)&&(T->Rchild))
n2++; //p為出度=2的結(jié)點(diǎn)//
else
n1++; // p為出度=1的結(jié)點(diǎn)//
preorder(T–>Lchild); //前序遍歷T之左子樹(shù)//