c语言 二叉树的建立
发布网友
发布时间:2022-04-29 18:26
我来回答
共2个回答
热心网友
时间:2022-06-19 01:09
根据二叉树的父节点和子节点的关系来创建
比如,父节点的编号是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<n)
node[i*2]=a[j++];
else break;//原数组里面已经没有数了
if(j<n)
node[i*2+1]=a[j++];
else break;
}
原代码:
#include <iostream>
#include<cmath>
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(j<n)
node[i*2]=a[j++];
else break;//原数组里面已经没有数了
if(j<n)
node[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)
}
}
void main()
{
int n,tree[1000],a[1000];
scanf("%d",&n);//原来数组的个数
for(int i=0;i<n;i++)scanf("%d",&a[i]);
buildTree(tree,a,n);
show(tree,n);
}
热心网友
时间:2022-06-19 01:10
根据二叉树的父节点和子节点的关系来创建
比如,父节点的编号是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<n)
node[i*2]=a[j++];
else break;//原数组里面已经没有数了
if(j<n)
node[i*2+1]=a[j++];
else break;
}
原代码:
#include <iostream>
#include<cmath>
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(j<n)
node[i*2]=a[j++];
else break;//原数组里面已经没有数了
if(j<n)
node[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)
}
}
void main()
{
int n,tree[1000],a[1000];
scanf("%d",&n);//原来数组的个数
for(int i=0;i<n;i++)scanf("%d",&a[i]);
buildTree(tree,a,n);
show(tree,n);
}
你的串号我已经记下,采纳后我会帮你制作