使用二叉链表建立二叉排序树
输入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; }