C语言中的二叉树插入排序

C语言中的二叉树插入排序,c,data-structures,recursion,tree,binary-tree,C,Data Structures,Recursion,Tree,Binary Tree,谁能解释一下在C语言中,当时间复杂度是一个问题时,如何使用插入排序对二叉树进行排序。我只是在学习编码。谢谢你们 如果按照传统意义对二叉树进行编码,那么在向树中添加项时,它将保留排序顺序。通过遍历树,可以按顺序获得项目的完整列表。我建议您阅读: 另请看:值得注意的是,这里有一个特定的术语可供使用。二叉树是一种数据结构,其中每个节点最多有两个子节点。二叉树中的节点排序没有约定 二叉搜索树是一种二叉树,对于给定的节点N,N的左子树中的所有节点都被视为“小于”N,而N的右子树中的所有节点都被视为

谁能解释一下在C语言中,当时间复杂度是一个问题时,如何使用插入排序对二叉树进行排序。我只是在学习编码。谢谢你们

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


另请看:

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

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

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

\35; include
#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);
  }
#包括 #定义FIN“algsort.in” #定义“algsort.out” 结构节点{ int-val; 结构节点*左; 结构节点*右; }; typedef结构节点; 无效插入(节点**bt,节点*节点){ 如果(!(*bt)){ *bt=节点; }否则{ 如果(节点->值<(*bt)->值) 插入(&((*bt)->左),节点; 其他的 插入(&((*bt)->右),节点; } } 无效打印输出(结构节点*节点){ 如果(节点->左)打印输出(节点->左); printf(“%d”,节点->值); 如果(节点->右侧)打印输出(节点->右侧); } 作废后订单(结构节点*节点){ 如果(节点->左)打印输出(节点->左); 如果(节点->右侧)打印输出(节点->右侧); printf(“%d”,节点->值); } int main(){ int i,n,elem; 节点*curr; 弗雷奥普(芬兰,“r”,标准); 弗雷奥普(FOUT,“w”,stdout); node*bt=NULL; scanf(“%d”和“&n”); 对于(i=0;ival=elem; 当前->左=空; 当前->右=空; 插入(&bt,当前); } 打印输出(bt); 返回(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

二叉树怎么会乱序!?如果您刚刚开始学习编码,请先尝试其他数据结构,然后再尝试二叉树@说书人,给了你一票。正如他所说的,他只是在学习,所以他可能不熟悉穿越树木。@venomiangs,我真的很好奇:)我想我可能会学到一些新汉克斯的东西,这正是我认真对待编码技能所需要的全部鼓励|