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