#include <stdio.h>
#include <malloc.h>
typedef struct BiTNode
{
int data; //关键字项
struct BiTNode *lchild,*rchild; //左右孩子指针
} BiTNode;
int BTreeCount(BiTNode *T)//计算二叉树结点的总数
{
if(T==NULL)
{
return 0;
}else{
return BTreeCount(T->lchild)+BTreeCount(T->rchild)+1;
}
}
void DispBST(BiTNode *bt) //输出一棵排序二叉树
{
if (bt!=NULL)
{
printf("%d",bt->data);
if (bt->lchild!=NULL||bt->rchild!=NULL)
{
printf("("); //有孩子结点时才输出(
DispBST(bt->lchild); //递归处理左子树
if (bt->rchild!=NULL) printf(","); //有右孩子结点时才输出,
DispBST(bt->rchild); //递归处理右子树
printf(")"); //有孩子结点时才输出)
}
}
}
int InsertBST(BiTNode *&p,int k)//递归算法,在p所指向的二叉排序树中,插入值为k的节点
{
if (p==NULL) //原树为空, 新插入的记录为根结点
{
p=(BiTNode *)malloc(sizeof(BiTNode));
p->data=k;
p->lchild=p->rchild=NULL;
return 1;
}
else if (k==p->data) //树中存在相同关键字的结点,返回0
return 0;
else if (k<p->data)
return InsertBST(p->lchild,k); //插入到*p的左子树中
else
return InsertBST(p->rchild,k); //插入到*p的右子树中
}
BiTNode *CreateBST(int A[],int n) //由有n个元素的数组A,创建一个二叉排序树
{ //返回BST树根结点指针
BiTNode *bt=NULL; //初始时bt为空树
int i=0;
while (i<n)
{
InsertBST(bt,A[i]); //将关键字A[i]插入二叉排序树T中
i++;
}
return bt; //返回建立的二叉排序树的根指针
}
int main()
{
BiTNode *bt,*p;
int n=12,x=46;
int a[]= {25,18,46,2,53,39,32,4,74,67,60,11};
int bTreeCount;
bt=CreateBST(a,n);
DispBST(bt);
printf("\n");
bTreeCount=BTreeCount(bt);
printf("结点总个数:%d\n",bTreeCount);
return 0;
}
二叉树:编写一个函数int BTreeCount(BiTNode *T)。函数功能:计算二叉树结点的总数。
最新推荐文章于 2023-11-03 10:25:54 发布