所以我正在尝试使用给定的数组创建一个二叉树,然后按顺序、前序和后序打印结果,但似乎我在某个地方犯了一个错误,但就我所看到的情况来看,一切应该没问题。
这是它打印出来的结果。
1 2 3 4 5 6 7 8 9 10 #inorder
10 9 8 7 6 5 4 3 2 1 #postorder
1 2 3 4 5 6 7 8 9 10 #preorder
这是我目前做的。有人能指出错误并给予修复建议吗?
#include <stdio.h>
#include <stdlib.h>
typedef struct node_s node_t;
struct node_s
{
int key;
node_t *left,*right;
};
node_t *new_node(int val)
{
node_t *new;
new= malloc(sizeof (node_t));
if(new==NULL)
{
exit(1);
}
new->key=val;
new->left=NULL;
new->right=NULL;
return new;
}
void print_inorder(node_t *root)
{
node_t *new=root;
if (new != NULL) {
print_inorder(new->left);
printf("%d ",new->key);
print_inorder(new->right);
}
return;
}
void print_postorder(node_t *root)
{
node_t *new=root;
if (new != NULL) {
print_postorder(new->left);
print_postorder(new->right);
printf("%d ",new->key);
}
return;
}
void print_preorder(node_t *root)
{
node_t *new=root;
if (new != NULL) {
printf("%d ",new->key);
print_preorder(new->left);
print_preorder(new->right);
}
return;
}
node_t *insert_node(node_t *root,int val)
{
if(root==NULL)
return new_node(val);
else
{
if(val<root->left)
root->left= insert_node(root->left,val);
else if(val>root->left)
root->right= insert_node(root->right,val);
}
return root;
}
int main() {
int n;
int v[]={1,2,3,4,5,6,7,8,9,10};
node_t *root=NULL;
FILE *file;
file= fopen("file","r");
if(file==NULL)
{
exit(1);
}
for (int i = 0; i < 10; ++i) {
root= insert_node(root,v[i]);
}
print_inorder(root);
printf("\n");
print_postorder(root);
printf("\n");
print_preorder(root);
return 0;
}
v[]
数组进行排序,您将不会在root
节点上有一个左分支。所有数据都存储在root
的右分支上。尝试使用未排序的输入,例如int v[] = { 5, 6, 7, 8, 9, 0, 1, 2, 3, 4 };
(或类似的输入)。您明白为什么您当前已排序的v[]
只填充了树的右分支吗? - David C. Rankin