数据结构(用C语言描述)

#包含?& ltstdio.h & gt

#包含?& 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;

经过调试,没有问题,所需的三个功能都已经完成。