使用二叉链表建立二叉排序树
输入n个关键码(n≤80),使用二叉链表建立二叉排序树,查找关键码x,删除x,中序输出排序树,否则输出“x不存在”。 我知道这是在要答案,可是我们书上根本没有这类题,问老师吧又说让我自己探索,唉,谢谢大家帮帮忙咯。
关键码是什么类型的?
程序代码:#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node * left;
struct node * right;
}NODE, * TREE;
void insert(TREE * tree, NODE * node)
{
if(node == NULL) return;
if(*tree == NULL) *tree = node;
if((*tree)->data > node->data)
insert(&((*tree)->left), node);
else if((*tree)->data < node->data)
insert(&((*tree)->right), node);
}
void insertValue(TREE * tree, int value)
{
NODE * node;
node = (NODE *)malloc(sizeof(NODE));
node->data = value;
node->left = NULL;
node->right = NULL;
insert(tree, node);
}
int deleteValue(TREE * tree, int value)
{
NODE * node;
if(*tree == NULL) return 0;
if((*tree)->data < value) return deleteValue(&((*tree)->left), value);
if((*tree)->data > value) return deleteValue(&((*tree)->right), value);
insert(&((*tree)->right), (*tree)->left);
node = (*tree)->right;
free(*tree);
*tree = node;
return 1;
}
void deleteTree(TREE * tree)
{
if(*tree == NULL) return;
deleteTree(&((*tree)->left));
deleteTree(&((*tree)->right));
free(*tree);
}
void inorderTraversal(TREE tree)
{
if(tree == NULL) return;
inorderTraversal(tree->left);
printf("%d ", tree->data);
inorderTraversal(tree->right);
}
int main()
{
int a[] = {5, 3, 8, 7, 1, 9}, i;
TREE tree = NULL;
for(i = 0; i < 6; i++)
insertValue(&tree, a[i]);
inorderTraversal(tree);
puts("\n删除值5(存在)");
if(!deleteValue(&tree, 5)) puts("值5不存在");
inorderTraversal(tree);
puts("\n删除值6(不存在)");
if(!deleteValue(&tree, 6)) puts("值6不存在");
inorderTraversal(tree);
deleteTree(&tree);
return 0;
}