0

嘿,任何人都可以解释如何在 C 语言中使用插入排序对二叉树进行排序,其中时间复杂度是一个问题。我只是在学习编码。谢谢你们!

4

3 回答 3

1

值得注意的是,这里使用了特定的术语。二叉树是一种数据结构,其中每个节点最多有两个孩子。二叉树中的节点排序没有约定。

二叉搜索树是一种二叉树,对于给定节点 N,N 的左子树中的所有节点都被认为“小于”N,而 N 的右子树中的所有节点都被认为“大于”N。您也可以让节点被认为“等于”树中的 N,只要您始终将它们定义为放在左子树或右子树中。

正如其他人所建议的那样,最好的办法是修改代码以构造二叉搜索树而不是普通的二叉树,或者将二叉树转换为线性数据结构并对其进行排序。

于 2013-02-22T03:29:59.880 回答
0

如果您以传统意义上的二叉树编码,那么当您将项目添加到树时,它将保留排序顺序。您可以通过遍历树来按顺序获取项目的完整列表。我建议你阅读:

也看看: http: //nova.umuc.edu/~jarc/idsv/lesson1.html

于 2013-02-21T23:48:30.760 回答
0
#include <stdio.h>
#include <malloc.h>
#define FIN "algsort.in"
#define FOUT "algsort.out"

struct Node {
   int val;
   struct Node *left;
   struct Node *right;
};

typedef struct Node node;

void insert(node **bt, node *Node) {

if( !(*bt) ) {

     *bt = Node;

} else {

        if( Node->val < (*bt)->val )

            insert(&((*bt)->left), Node);

        else

            insert(&((*bt)->right), Node);
 }
 }

 void printout(struct Node *node) {

   if(node->left) printout(node->left); 

   printf("%d ", node->val);  

   if(node->right) printout(node->right);
 }

 void postorder(struct Node *node) {

      if(node->left) printout(node->left);   

      if(node->right) printout(node->right); 

      printf("%d ", node->val);  
 }

 int main () {

     int i, n, elem;    

     node *curr; 

     freopen(FIN, "r", stdin);

     freopen(FOUT, "w", stdout);

     node *bt = NULL;

     scanf("%d", &n);

     for(i = 0; i < n; ++i) {

        scanf("%d", &elem); 

        curr = malloc( sizeof(struct Node) );

        curr->val = elem;

        curr->left = NULL;

        curr->right = NULL;

        insert(&bt, curr );

     }

    printout( bt ); 

    return(0);
  }

假设 algsort.in 包含以下整数数组:

algsort.int -> 9,8,7,6,5,4,3,2,0,1,-1;

algsort.out -> -1,0,1,2,3,4,5,6,7,8,9

于 2016-04-25T12:02:09.387 回答