嘿,任何人都可以解释如何在 C 语言中使用插入排序对二叉树进行排序,其中时间复杂度是一个问题。我只是在学习编码。谢谢你们!
user2097471
问问题
1634 次
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 回答