爱问知识人 爱问教育 医院库

C语言建立二叉树

首页

C语言建立二叉树

我有一个数组:a[7]={1,2,3,4,-1,5}
是这样的,-1代表空。把这个数组按照层次遍历的顺序建立
二叉树:
1
2 3
4 x 5 (x的意思是空)
如何创建?

提交回答

全部答案

    2018-05-01 14:17:29
  •   根据二叉树的父节点和子节点的关系来创建
    比如,父节点的编号是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(j node[i*2]=a[j ];
    else break;//原数组里面已经没有数了
    if(j 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){printf(" ");e ;h=0;}
    }
    }
    void main()
    {
    int n,tree[1000],a[1000];
    scanf("%d",&n);//原来数组的个数
    for(int i=0;i buildTree(tree,a,n);
    show(tree,n);
    }。

    逃***

    2018-05-01 14:17:29

类似问题

换一换

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 175-194
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):