二叉搜索树的操作集

来源:互联网 发布:识别蘑菇的软件 编辑:程序博客网 时间:2024/05/02 11:05

如题↑,我只是怕忘掉。。所以放这儿备用

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>typedef int ElementType;typedef struct TNode *Position;typedef Position BinTree;struct TNode{    ElementType Data;    BinTree Left;    BinTree Right;};void PreorderTraversal( BinTree BT ); /* 先序遍历*/void InorderTraversal( BinTree BT );  /* 中序遍历 */BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindMin( BinTree BST );Position FindMax( BinTree BST );int main(){    BinTree BST, MinP, MaxP, Tmp;    ElementType X;    int N, i;    BST = NULL;    scanf("%d", &N);    for ( i=0; i<N; i++ ) {        scanf("%d", &X);        BST = Insert(BST, X);    }    printf("Preorder:"); PreorderTraversal(BST); printf("\n");    MinP = FindMin(BST);    MaxP = FindMax(BST);    scanf("%d", &N);    for( i=0; i<N; i++ ) {        scanf("%d", &X);        Tmp = Find(BST, X);        if (Tmp == NULL) printf("%d is not found\n", X);        else {            printf("%d is found\n", Tmp->Data);            if (Tmp==MinP) printf("%d is the smallest key\n", Tmp->Data);            if (Tmp==MaxP) printf("%d is the largest key\n", Tmp->Data);        }    }    scanf("%d", &N);    for( i=0; i<N; i++ ) {        scanf("%d", &X);        BST = Delete(BST, X);    }    printf("Inorder:"); InorderTraversal(BST); printf("\n");system("pause");    return 0;}BinTreeInsert(BinTree BST,ElementType X){if(!BST){BST=(BinTree)malloc(sizeof(struct TNode));BST->Left=NULL;BST->Right=NULL;BST->Data=X;}else{if(X>BST->Data)BST->Right=Insert(BST->Right,X);if(X<BST->Data)BST->Left=Insert(BST->Left,X);}return BST;}void InorderTraversal(BinTree BT){ if(BT->Left!=NULL)InorderTraversal(BT->Left);printf("%d ",BT->Data);if(BT->Right!=NULL)InorderTraversal(BT->Right);}void PreorderTraversal(BinTree BT){printf(" %d",BT->Data);if(BT->Left!=NULL)PreorderTraversal(BT->Left);if(BT->Right!=NULL)PreorderTraversal(BT->Right); } Position Find(BinTree BST,ElementType X){if(BST==NULL)return BST;if(BST->Data>X)return Find(BST->Left,X);if(BST->Data<X)return Find(BST->Right,X);if(BST->Data==X)return BST; } Position FindMin(BinTree BST){if(BST->Left!=NULL)return FindMin(BST->Left);elsereturn BST;}Position FindMax(BinTree BST){if(BST->Right!=NULL)return FindMax(BST->Right);elsereturn BST;} BinTree Delete(BinTree BST,ElementType X){if(BST==NULL)printf("Not Found\n");else{if(X>BST->Data)BST->Right=Delete(BST->Right,X);if(X<BST->Data)BST->Left=Delete(BST->Left,X);if(X==BST->Data){if(BST->Left==NULL)return BST->Right;elseif(BST->Right==NULL)return BST->Left;else{BinTree zhan=FindMax(BST->Left);BST->Data=zhan->Data;BST->Left=Delete(BST->Left,zhan->Data);}}}return BST;}

0 0