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);