数据结构(用C语言描述)
#包含?& ltstdlib.h & gt
#包含?& ltmath.h & gt
#定义?数据类型?(同Internationalorganizations)国际组织
#定义?MAXSIZE?1000
typedef?struct?节点{
数据类型?数据;
struct?节点?* lchild
struct?节点?* rchild
} BiTreeNode
数据类型?BT[MAXSIZE];
BiTreeNode*?BuildBTree(数据类型?BT[],?int?n,?int?我)
{
双网节点?*?节点;
如果(i & gt=n?||?(node =(BiTreeNode *)malloc(sizeof(BiTreeNode)))= = NULL)?回归?NULL
节点->;数据?=?BT[I];
节点->;lchild?=?BuildBTree(BT,n,?2 * I+1);
节点->;奇尔德?=?BuildBTree(BT,n,?2 * I+2);
回归?节点;
}
作废?PrintLevel(BiTreeNode?*?bt,?int?水平,?int?l)
{
如果(!bt)?返回;
如果(l?& lt?级别)
print level(Bt-& gt;lchild?级别,l+1);
如果(l?==?级别)
printf("%4d ",Bt-& gt;数据);
如果(l?& lt?级别)
print level(Bt-& gt;孩子?级别,l+1);
}
/*?优先凹表示输出?一般靠前导空格凹进去?#*/
/*pre和sur分别是前导字符和后续字符。通常,前导字符是空格字符,# */
作废?printree(BiTreeNode?*bt,char?pre,char?sur,int?深度,int?级别){
if(bt==NULL)?回归?;?/*如果是空树,返回;;*/
int?I = 0;?/*前缀输出根*/
而(++I & lt;水平)?printf("%c%c%c%c ",pre,pre,pre,pre);//?凹面,输出前导字符
printf("%4d ",Bt-& gt;数据);//?输出当前节点
while(i++ & lt;深度)?printf("%c%c%c%c ",sur,sur,sur,sur);//?输出后续字符
printf(" \ n ");
/*输出子树*/
打印树(Bt-& gt;lchild,pre,sur,depth,level+1);
打印树(Bt-& gt;rchild,pre,sur,depth,level+1);
}
作废?CTBT(int?n)
{//?建立初始n个节点的完全二叉树
while(n -)?BT[n]?=?n;
}
int?主()
{
int?I,n,深度;
双网节点?* bt
scanf("%d ",& ampn);
CTBT(北);
bt?=?BuildBTree(BT,n,?0);
深度?=?(int)(log(n)/log(2))+1;
I = 0;
而(++I & lt;=深度)
{
printf(" \ n?%dth?级别:“,我);
PrintLevel(bt,我,1);
}
printf(" \ n ");
PrintTree(bt,'?','-',深度,1);
回归?0;
经过调试,没有问题,所需的三个功能都已经完成。