【问题标题】:Binary tree insertion sort in CC中的二叉树插入排序
【发布时间】:2013-02-07 11:35:09
【问题描述】:

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

【问题讨论】:

  • 二叉树怎么会乱序!?
  • 如果您刚开始学习编码,请先尝试一些其他数据结构,然后再尝试二叉树!
  • @StoryTeller,给了你一票。正如他所说,他只是在学习,所以他可能不熟悉树木的遍历。
  • @VenomFangs,我真的很好奇 :) 以为我可以学到一些新东西
  • 感谢各位,这是我认真对待我的编码技能所需要的所有鼓励。 :|

标签: c data-structures recursion tree binary-tree


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:
      #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

      【讨论】:

        猜你喜欢
        • 2011-06-22
        • 2016-01-17
        • 1970-01-01
        • 1970-01-01
        • 2020-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-13
        相关资源
        最近更新 更多