HWANGYUKAH
2019-06-01 22:46
采纳率: 45.5%
浏览 415

菜鸟#c语言数据结构#二叉树

顺序存储的方式构造一颗排序树,但输出结果有误,不知如何下手

#include<stdio.h>
//
void createbtree(int *tree,int *data,int len)
{
    int i;
    int number;
    tree[1]=data[0];

    for(i=1;i<len;i++)
    {
        number=1;
        while(tree[number]!=0)
        {

            if(data[i]>tree[number])
            {
                number=2*number+1;
            }
            if(data[i]<tree[number])
            {
                number=2*number;
            }

        }
        tree[number]=data[i];
    }

}
//printf
void printf_btree(int *tree)
{
    int i;
    for(i=1;i<34;i++)
    {
        printf("%2d%8d\n",i,tree[i]);

    }
}
int main()
{
    int data[10]={6,5,9,4,7,3,2,8,1};
    int tree[34]={0};
    int len=10; 

    createbtree(tree,data,len);
    printf_btree(tree);

     return 0;
}

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • threenewbee 2019-06-02 10:10
    已采纳

    程序没有根本性的错误,只是数组下标从0而不是1开始算

    // Q764195.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include<stdio.h>
    //
    void createbtree(int* tree, int* data, int len)
    {
        int i;
        int number;
        tree[0] = data[0];
    
        for (i = 0; i < len; i++)
        {
            number = 1;
            while (tree[number] != 0)
            {
    
                if (data[i] > tree[number])
                {
                    number = 2 * number + 1;
                }
                if (data[i] < tree[number])
                {
                    number = 2 * number;
                }
    
            }
            tree[number] = data[i];
        }
    
    }
    //printf
    void printf_btree(int* tree)
    {
        int i;
        for (i = 0; i < 34; i++)
        {
            printf("%2d%8d\n", i, tree[i]);
    
        }
    }
    int main()
    {
        int data[9] = { 6,5,9,4,7,3,2,8,1 };
        int tree[34] = { 0 };
        int len = 9;
    
        createbtree(tree, data, len);
        printf_btree(tree);
    
        return 0;
    }
    

    0 6
    1 6
    2 5
    3 9
    4 4
    5 0
    6 7
    7 0
    8 3
    9 0
    10 0
    11 0
    12 0
    13 8
    14 0
    15 0
    16 2
    17 0
    18 0
    19 0
    20 0
    21 0
    22 0
    23 0
    24 0
    25 0
    26 0
    27 0
    28 0
    29 0
    30 0
    31 0
    32 1
    33 0

    如果问题得到解决,请点我回答左上角的采纳,谢谢

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题