#include<stdio.h>
#define ARRAY_MAX 12
int main()
{
int tree[ARRAY_MAX];
for(int i = 0;i < ARRAY_MAX;i++)
tree[i] = i+1;
int flag = 0;//记录当前叶子的遍历位置,0 刚遍历到这个叶子,1 已经遍历完成该叶子的左儿子,2 已经遍历完成该叶子的右儿子
int count = 1;//假设tree不为空
while(!(count == 1&&flag == 2))
{
if(flag == 0)
{
printf("%d ",tree[count-1]);
if(count*2 > ARRAY_MAX)
flag = 1;
else
count = count*2;
}
else if(flag == 1)
{
if(count*2+1 > ARRAY_MAX)
flag = 2;
else
{
count = count*2+1;
flag = 0;
}
}
else if(flag == 2)
{
if(count%2 == 0)
flag = 1;
else
flag = 2;
count = count/2;
}
}
getchar();
return 0;
}
以上代码Microsoft Visual C++ 6.0中编译通过,输出的数列为以下下二叉树的前序遍历
连5分都不给,真小气......
广告 您可能关注的内容 |