C语言建立二叉树
我有一个数组:a[7]={1,2,3,4,-1,5}
是这样的,-1代表空。把这个数组按照层次遍历的顺序建立
二叉树:
1
2 3
4 x 5 (x的意思是空)
如何创建?
根据二叉树的父节点和子节点的关系来创建
比如,父节点的编号是1,那么左子节点的编号就是2,右子节点的编号就是3
关系
父节点编号为i,则左子节点编号为2*i,右子节点编号为2*i 1
然后按照从小到大的顺序赋值就行了
比如操作 先i=1;node[1]=1,根节点赋值
再node[1*2]=node[2]=2;在node[1*2 1]=node[3]=3;
再i=2;node[2*2]=node[4]=4;node[2*2 1]=node[5]=-1;
再i=3;node[3*2]=node[6]=5。
。。
。。
依次下去,发现没,可以用一个数组来存,正好是按照层次遍历的顺序建立的,i不代表层次,具体有多少层用log2(n) 1来求,n就是你数组a里面的个数
整个创建过程就是这样,
假设a数组的个数为n,你的是7
node[1]=a[0];//根
int j=1;
for(i=1;;i )
{
if(j
#include
void buildTree(int node[],int a[],int n)//建树
{
if(n==0)return;//原数组为空
node[1]=a[0];//根
int j=1;
for(int i=1;;i )
{
if(jnode[i*2]=a[j ];
else break;//原数组里面已经没有数了
if(jnode[i*2 1]=a[j ];
else break;
}
}
void show(int node[],int n)//按层显示,同一层以空格隔开
{
int e=0,h=0;
for(int i=1;i<=n;i )
{
printf("%d ",node[i]);
h ;
if((int)pow(2,e)==h){printf(" ");e ;h=0;}
}
}
void main()
{
int n,tree[1000],a[1000];
scanf("%d",&n);//原来数组的个数
for(int i=0;ibuildTree(tree,a,n);
show(tree,n);
}。
答:二叉树的前序遍历访问顺序是abdgcefh 则说明二叉树的根结点为 a (*)再从中序遍历访问顺序中找出 a ,根据中序遍历的特点可以知道:在中序遍历访问顺序中...详情>>
问:C语言C语言为了准备三级网络技术上机考试,c语言至少要看到那一章节?
答:数据类型、输入输出、选择语句、循环语句、数组、指针、函数、文件详情>>
答:读指针用来记录文件当前文件之前的读取位置,它指向下一个将要读取的信息项详情>>