我在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;数据。 非常感谢。
答案 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) ;
}
}