• 04-树7 二叉搜索树的操作集 中国大学MOOC-陈越、何钦铭-数据结构-2020夏


    题目: https://pintia.cn/problem-sets/1268384564738605056/problems/1276814005115539459
    题解: https://blog.csdn.net/Dilly__dally/article/details/82025393
    代码:

    #include <stdio.h>
    #include <stdlib.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("
    ");
        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
    ", X);
            else {
                printf("%d is found
    ", Tmp->Data);
                if (Tmp == MinP) printf("%d is the smallest key
    ", Tmp->Data);
                if (Tmp == MaxP) printf("%d is the largest key
    ", Tmp->Data);
            }
        }
        scanf("%d", &N);
        for (i = 0; i < N; i++) {
            scanf("%d", &X);
            BST = Delete(BST, X);
        }
        printf("Inorder:"); InorderTraversal(BST); printf("
    ");
    
        return 0;
    }
    /* 你的代码将被嵌在这里 */
    BinTree Insert(BinTree BST, ElementType X)
    {
        if (BST == NULL) {
            BST = (BinTree)malloc(sizeof(BinTree));
            BST->Data = X;
            BST->Left = BST->Right = NULL;
        }
        else
        {
            if (BST->Data > X)
            {
                BST->Left = Insert(BST->Left, X);
            }
            else if (BST->Data < X)
            {
                BST->Right = Insert(BST->Right, X);
            }
        }
        return BST;
    }
    BinTree Delete(BinTree BST, ElementType X) {
    
        if (BST == NULL) {
            printf("Not Found
    ");
        }
        else {
            if (X > BST->Data)
                BST->Right = Delete(BST->Right, X);
            else if (X < BST->Data)
                BST->Left = Delete(BST->Left, X);
            else {
                if (BST->Left && BST->Right) {
                    Position tmp = FindMin(BST->Right);
                    BST->Data = tmp->Data;
                    BST->Right = Delete(BST->Right, BST->Data);
                }
                else {
                    Position tmp = BST;
                    if (BST->Left)
                        BST = BST->Left;
                    else
                        BST = BST->Right;
                    free(tmp);
                }
            }
        }
        return BST;
    }
    Position Find(BinTree BST, ElementType X)
    {
        if (BST)
        {
            if (X == BST->Data)return BST;
            else if (X > BST->Data)return Find(BST->Right, X);
            else return Find(BST->Left, X);
        }
        return BST;
    }
    Position FindMin(BinTree BST)
    {
        if (BST == NULL)return BST;
        if (BST->Left)FindMin(BST->Left);
        else return BST;
    }
    Position FindMax(BinTree BST)
    {
        if (BST == NULL)return BST;
        if (BST->Right)FindMax(BST->Right);
        else return BST;
    }
  • 相关阅读:
    身体终于好了 敢大声说话 没事了
    网名 关于网名
    opencv学习20初探基本类型数据
    SQL语句精典收藏
    CodeSimth Update存储过程
    动态sql语句基本语法
    CodeSmith下载与生成存储过程的一个模板
    SQL SERVER的数据类型
    SQL语句精典收藏
    CodeSmith入门教程之编写数据库模板
  • 原文地址:https://www.cnblogs.com/simon-chou/p/13619777.html
Copyright © 2020-2023  润新知