C二叉树排序 - 扩展它

时间:2015-06-22 20:40:31

标签: c binary-tree binary-search-tree

我在C

中需要一些帮助

帮我扩展C上的二叉树排序。我需要在 sort 函数中返回一个排序数组。

这里是:

#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 ) ;
    }
}
inorder 函数中的

排序数组可以像sr一样打印 - &gt;数据。 非常感谢。

1 个答案:

答案 0 :(得分:1)

要修改的样本,如

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) ;
    }
}