嘿,任何人都可以解释如何使用C语言中的插入排序对二叉树进行排序,其中时间复杂性是一个问题。我只是在学习编码。谢谢你们!
答案 0 :(得分:1)
值得注意的是,这里有一些术语可供使用。 二叉树是一种数据结构,其中每个节点最多有两个子节点。在二叉树中没有用于排序节点的约定。
二进制搜索树是二叉树,因此对于给定节点N,N的左子树中的所有节点被认为是“小于”N,并且右子树中的N的所有节点都是被认为是“大于”N.您也可以让节点在树中被认为“等于”N,只要您始终将它们定义为放在左子树或右子树中。
正如其他人所建议的那样,最好的方法是修改代码以构建二叉搜索树而不是普通的二叉树,或者将二叉树转换为线性数据结构并对其进行排序。
答案 1 :(得分:0)
如果您使用传统意义编码二叉树,那么当您向树中添加项目时,它将保留已排序的顺序。您可以通过遍历树来按顺序获取项目的完整列表。我建议你阅读:
答案 2 :(得分: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 - &gt; 9,8,7,6,5,4,3,2,0,1,-1;
algsort.out - &gt; -1,0,1,2,3,4,5,6,7,8,9