C binary tree sort - extending it

雨燕双飞 提交于 2019-12-12 06:38:53

问题


I need some help in C

Help me to extend the binary tree sort on C. I need to return a sorted array in sort function.

here it is:

#include <stdio.h>
#include <stdlib.h>

struct btreenode
{
    struct btreenode *leftchild ;
    int data ;
    struct btreenode *rightchild ;
} ;

void insert ( struct btreenode **, int ) ;
void inorder ( struct btreenode * ) ;


int* sort(int *array, int arr_size)
{
    struct btreenode *bt ;
    int i;
    bt = NULL;

    for ( i = 0 ; i <= 9 ; i++ )
        insert ( &bt, array[i] ) ;

    inorder ( bt ) ;


    //return ordered array
    return array;
}

void insert ( struct btreenode **sr, int num )
{
    if ( *sr == NULL )
    {
        *sr = malloc ( sizeof ( struct btreenode ) ) ;

        ( *sr ) -> leftchild = NULL ;
        ( *sr ) -> data = num ;
        ( *sr ) -> rightchild = NULL ;
    }
    else
    {
        if ( num < ( *sr ) -> data )
            insert ( &( ( *sr ) -> leftchild ), num ) ;
        else
            insert ( &( ( *sr ) -> rightchild ), num ) ;
    }
}

void inorder ( struct btreenode *sr )
{
    if ( sr != NULL )
    {
        inorder ( sr -> leftchild ) ;
        //printf ( "%d\t", sr -> data ) ;
        inorder ( sr -> rightchild ) ;
    }
}

in inorder function sorted array can be printed like sr -> data. thank a lot.


回答1:


a sample to modify like as

void inorder ( struct btreenode *, int ** ) ;

int* sort(int *array, int arr_size)
{
    struct btreenode *bt = NULL;
    int i, *p = array;

    for ( i = 0 ; i < arr_size ; i++ )
        insert ( &bt, array[i] ) ;

    inorder ( bt, &p) ;
    //deallocate tree
    return array;
}
void inorder ( struct btreenode *sr, int **array)
{
    if ( sr != NULL )
    {
        inorder ( sr -> leftchild, array) ;
        **array = sr -> data ;
        ++*array;
        inorder ( sr -> rightchild, array) ;
    }
}


来源:https://stackoverflow.com/questions/30989431/c-binary-tree-sort-extending-it

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!