C 二叉树排序 - 扩展它

标签 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 -> data一样打印。 非常感谢。

最佳答案

修改示例如下

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

关于C 二叉树排序 - 扩展它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30989431/

相关文章:

c - 节点、类型定义、Null 的工作原理(C 编程语言)C 链表

python - 给定 Python 中前缀表示法的字符串表达式,递归创建二叉树

c++ - BST的递归插入

algorithm - 与 STL 实现相比,自平衡 BST 的自定义实现可以做什么?

C 将标准输出重定向到几个地方

c++ - 无法编译 brian gladman aes 库

c - 开发内核并在虚拟机中测试它们

c - C语言中深度为4的二叉树的邻接矩阵

java - java中的递归函数用字典填充二叉树

java - 具有特定特征的Bst; Bst 将具有多次交互作用的节点保留在根节点