6-1统计二叉树节点个数
int NodeCount ( BiTree T)
{
int l,r;
if(!T) return 0;
else
{
l=NodeCount(T->lchild);
r=NodeCount(T->rchild);
return l+r+1;
}
}
6-2统计二叉树叶子结点个数
int LeafCount ( BiTree T)
{
int sum=0;
if(!T) return 0;
else if(!T->lchild&&!T->rchild) sum+=1;
else return LeafCount(T->lchild)+LeafCount(T->rchild);
return sum;
}
6-3统计二叉树度为1的结点个数
int NodeCount ( BiTree T)
{
if(!T) return 0;
if(T->lchild==NULL&&T->rchild!=NULL||T->rchild==NULL&&T->lchild!=NULL){
return 1+NodeCount(T->lchild)+NodeCount(T->rchild);
}
return NodeCount(T->lchild)+NodeCount(T->rchild);
}
6-4统计二叉树度为2的结点个数
int NodeCount ( BiTree T)
{
if(!T) return 0;
if(T->lchild!=NULL&&T->rchild!=NULL){
return 1+NodeCount(T->lchild)+NodeCount(T->rchild);
}
return NodeCount(T->lchild)+NodeCount(T->rchild);
}
6-5求二叉树的深度
int Depth(BiTree T)
{
if(!T) return 0;
else if(Depth(T->lchild)>=Depth(T->rchild))
return Depth(T->lchild)+1;
else return Depth(T->rchild)+1;
}
6-6先序输出叶结点
void PreorderPrintLeaves( BinTree BT )
{
if(BT)
{
if(BT->Left==NULL&&BT->Right==NULL) printf(" %c",BT->Data);
PreorderPrintLeaves(BT->Left);
PreorderPrintLeaves(BT->Right);
}
}
6-7二叉树的三种遍历
//空树 空操作
//不空 DLR输出根,左 右
void Preorder(BiTree T)
{
if(T)
{
printf(" %c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
void Inorder(BiTree T)
{
if(T)
{
Inorder(T->lchild);
printf(" %c",T->data);
Inorder(T->rchild);
}
}
void Postorder(BiTree T)
{
if(T)
{
Postorder(T->lchild);
Postorder(T->rchild);
printf(" %c",T->data);
}
}
6-8后缀表达式
void Suffix(BiTree T)
{
if(T)
{
Suffix(T->lchild);
Suffix(T->rchild);
printf("%c ",T->data);
}
}
6-9二叉树的层次遍历
void Levelorder(BiTree T)
{
BiTree q[1000];
int f=0,r=0;
if(T) q[r++]=T;
while(f!=r)
{
BiTree p=q[f++];
printf(" %c",p->data);
if(p->lchild) q[r++]=p->lchild;
if(p->rchild) q[r++]=p->rchild;
}
}
6-10打印二叉树指定层次结点
void PrintLevel(BiTree T,int n)
{
if(T)
{
if(n==1) printf("%c ",T->data);
PrintLevel(T->lchild,n-1);
PrintLevel(T->rchild,n-1);
}
}
6-11层次输出n个结点
void PrintNode(BiTree T,int n)
{
BiTree q[1000];
int f=0,r=0;
if(T) q[r++]=T;
int cnt=0;
while(f!=r)
{
BiTree p=q[f++];
cnt++;
if(cnt==n)
{
printf("%c",p->data);
return;
}
if(p->lchild) q[r++]=p->lchild;
if(p->rchild) q[r++]=p->rchild;
}
}
6-12从下往上打印指定元素的所有祖先
int PrintAncestors(BiTree T,char ch)
{
int c1,c2;
if(T==NULL)return 0;//空树
else if(T->data==ch)
return 1;//找到ch的祖先,返回1
else
{
c1=PrintAncestors(T->lchild,ch);//递归查找子孙为ch的节点
c2=PrintAncestors(T->rchild,ch);
if(c1||c2)//返回1时
printf("%c ",T->data);//打印
}
}