这是二叉树按层输出(顺序树)为什么我监视内存设置断点调试
的时候i=4,j=6啦,明明有3层(i)啊,5个(j)有效结点啊,为什么啊,请各位帮我看看,谢谢了
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define VirNode 0 //虚结点的值
#define MAX_TREE_SIZE 100
typedef int TElemType;
typedef TElemType SqBitTree[MAX_TREE_SIZE]; //SqBitTree[0]单元存放结点的总数,甚至存放构成满二叉树时的结点总数
void creat(SqBitTree bt,int n)
{
int i;
for(i=1;i<=n;i++)
bt[i]=i;
bt[0]=i-1;
}
void leveltree(SqBitTree bt) //按满二叉树输出
{
int i = 1, j;
while (i <= bt[0]) // 按层扫描
{
for (j = i;j < 2*i;j++) // 扫描第i层结点
if (bt[j] == VirNode)
printf(" *"); // 若为虚结点输出“*”
else printf("%4d", bt[j]);
printf("\n");
i = 2 * i; // 跳到下一层
}
}
int main()
{
SqBitTree bt={0};
creat(bt,5);
leveltree(bt);
getch();
return 0;
}