zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Js计算时间差(天、小时、分钟、秒)
    [原创]chromium源码阅读-进程间通信IPC.消息的接收与应答
    loki之内存池SmallObj[原创]
    A Cross-Platform Memory Leak Detector
    UML Diagrams Using Graphviz Dot
    My Emacs Writing Setup
    Drawing Graphs using Dot and Graphviz
    SHFileOperation的用法
    latex中文模板
    C++ Design Pattern: What is a Design Pattern?
  • 原文地址:https://www.cnblogs.com/simon-chou/p/13619777.html
Copyright © 2011-2022 走看看