<<c>>二叉查找树

来源:互联网 发布:arr数组怎么转化成json 编辑:程序博客网 时间:2024/06/07 21:54
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>typedef struct TreeNode *PtrToNode;typedef struct TreeNode * Position;typedef struct TreeNode * SearchTree;typedef int ElemType;struct TreeNode {    ElemType Element;    PtrToNode Left;    PtrToNode Right;};SearchTree MakeEmpty(SearchTree T) {    if (T != NULL) {        MakeEmpty(T->Left);        MakeEmpty(T->Right);        free(T);    }    return NULL;}Position Find(ElemType x, SearchTree T) {    if (T == NULL) {        return NULL;    }    if (x < T->Element) {        return Find(x, T->Left);    }else    if (x > T->Element) {        return Find(x, T->Right);    }    else        return T;}Position FindMin(SearchTree T) {    if (T == NULL)        return NULL;    else if (T->Left == NULL)        return T;    else        return FindMin(T->Left);//递归实现}Position FindMax(SearchTree T) {    if (T != NULL)        while (T->Right != NULL)            T = T->Right;//非递归实现    return T;}SearchTree Insert(ElemType x, SearchTree T) {    if (T == NULL) {        T = (SearchTree)malloc(sizeof(struct TreeNode));        if (T != NULL) {            T->Element = x;            T->Left = T->Right = NULL;        }    }    else if (x<T->Element) {        T->Left = Insert(x, T->Left);    }else if(x>T->Element){        T->Right = Insert(x, T->Right);    }   return T;}SearchTree Delete(ElemType x, SearchTree T) {    Position TmpCell;    if (T == NULL)        printf("error");    else if (x < T->Element)        T->Left = Delete(x, T->Left);    else if (x > T->Element)        T->Right = Delete(x, T->Right);    else if (T->Left&&T->Right) {        TmpCell = FindMin(T->Right);        T->Element = TmpCell->Element;        T->Right = Delete(T->Element,T->Right);    }    else    {        TmpCell = T;        if (T->Left == NULL)            T = T->Right;        else if (T->Right == NULL)            T = T->Left;        free(TmpCell);    }    return T;}void Visit(SearchTree T) {    if (T != NULL) {        Visit(T->Left);        Visit(T->Right);        printf("%d\t", T->Element);    }    else        return;             }int main(){    SearchTree T;    Position P;    T=(SearchTree)malloc(sizeof(struct TreeNode));    T->Element = 5;    T->Left = T->Right = NULL;    P = T;    for (int i = 1; i < 10; i++) {        P=Insert(i, T);    }    printf("insert success");    printf("input what you want to find");    int i;    scanf("%d", &i);    Position K = Find(i, T);    printf("find success is:%d\n",K->Element);    for(int t=1;t<4&&(T->Right != NULL||T->Left != NULL);t++){        printf("\ninput what you want to delete");        int d;        scanf("%d", &d);        T = Delete(d, T);        printf("delete success");        Visit(T);    }    T = MakeEmpty(T);    if (T == NULL) {        printf("\ndelete all the tree");    }    printf("\nthe list is empty");    getchar();    return 0;}
0 0
原创粉丝点击