void cc(TNode *t,int &n){ //計算節點數量 if(t!=NULL){ n++; cc(t->lchild,n); cc(t->rchild,n); } } void leaf(TNode *t,int &n){ //葉子計算 if(t!=NULL){ if(t->lchild==NULL && t->rchild==NULL) n++; leaf(t->lchild,n); leaf(t->rchild,n); } }
說明:在二叉樹的遞歸遍歷中,每個節點會且只會被訪問一次。在執行完當前的函數后,會返回上一層函數繼續執行未執行完的函數語句。也就是說,最先執行完整個函數的語句的是遞歸的最后一層。
調用:
int n=0;
leaf(t,n);
cc(t,n);