求相关节点个数
int depth(Bitree T)//求二叉树的深度 (递归)
{
if(T==NULL) return 0;
else
{
int m=depth(T->left);
int n=depth(T->right);
if(m>n) return m+1;
else return n+1;
}
}
int depth_s(Bitree T)//求二叉树的深度
{
if(T==NULL) return 0;
squeue Q;
initsqueue(Q);
int level=0,levelnum;
Enqueue(Q,T);
while(Q.front!=Q.rear)
{
int n=0;
levelnum=(Q.rear-Q.front+100)%100;
while(n<levelnum)
{
Bitree e;
Dequeue(Q,e);
if(e->left) Enqueue(Q,e->left);
if(e->right) Enqueue(Q,e->right);
n++;
}
level++;
}
return level;
}
int number(Bitree T)//求二叉树中节点的个数
{
if(T==NULL) return 0;
else return number(T->left)+number(T->right)+1;
}
int number_k(Bitree T,int k)//求二叉树第k层节点的个数
{
if(T==NULL||k<1) return 0;
if(k==1) return 1;
else return number_k(T->left,k-1)+number_k(T->right,k-1);
}
int leafnum(Bitree T)//求树中叶子节点的个数
{
if(T==NULL) return 0;
if(T->left==NULL&&T->right==NULL) return 1;
else return leafnum(T->left)+leafnum(T->right);
}
int N1num(Bitree T)//求度为一的节点的个数
{
if(T==NULL) return 0;
if((T->left&&!T->right)||(!T->left&&T->right))
return N1num(T->left)+N1num(T->right)+1;
else return N1num(T->left)+N1num(T->right);
}
int N1num_k(Bitree T,int k)//求第k层度为一的节点的个数,与此类似的求法相同
{
if(T==NULL||k<1) return 0;
if(k==1)
{
if((T->left&&!T->right)||(!T->left&&T->right)) return 1;
else return 0;
}
else return N1num_k(T->left,k-1)+N1num_k(T->right,k-1);
}
int N2num(Bitree T)//求度为二的节点的个数,N0=N2+1
{
if(T==NULL) return 0;
if(T->left&&T->right) return N2num(T->left)+N2num(T->right)+1;
else return N2num(T->left)+N2num(T->right);
}