zoukankan      html  css  js  c++  java
  • [PTA] 数据结构与算法题目集 6-12 二叉搜索树的操作集

    唯一比较需要思考的删除操作:

    被删除节点有三种情况:

    1、叶节点,直接删除

    2、只有一个子节点,将子节点替换为该节点,删除该节点。

    3、有两个子节点,从右分支中找到最小节点,将其值赋给被删除节点的位置,接着删除这个最小节点

     // 函数Insert将X插入二叉搜索树BST并返回结果树的根结点指针;
    BinTree Insert(BinTree BST, ElementType X)
    {
        if (BST == NULL)
        {
            BST = (BinTree)malloc(sizeof(BinTree));
            BST->Data = X;
            BST->Left = NULL;
            BST->Right = NULL;
        }
        if (X > BST->Data)
            BST->Right = Insert(BST->Right, X);
        if (X < BST->Data)
            BST->Left = Insert(BST->Left, X);
        return BST;
    }
    
    // 函数Delete将X从二叉搜索树BST中删除,并返回结果树的根结点指针;如果X不在树中,则打印一行Not Found并返回原树的根结点指针;
    BinTree Delete(BinTree BST, ElementType X)
    {
        if (BST == NULL)
        {
            printf("Not Found
    ");
            return NULL;
        }
    
        if (X > BST->Data)
            BST->Right = Delete(BST->Right, X);
        else if (X < BST->Data)
            BST->Left = Delete(BST->Left, X);
        else if (X == BST->Data)
        {
            Position node;
            if (BST->Left && BST->Right)
            {
                node = FindMin(BST->Right);
                BST->Data = node->Data;
                BST->Right = Delete(BST->Right, BST->Data);
            }
            else
            {
                node = BST;
                if (BST->Left == NULL)
                    BST = BST->Right;
                else if (BST->Right == NULL)
                    BST = BST->Left;
                free(node);
            }
        }
        return BST;
    }
    
    //函数Find在二叉搜索树BST中找到X,返回该结点的指针;如果找不到则返回空指针;
    Position Find(BinTree BST, ElementType X)
    {
        while (BST)
        {
            if (X == BST->Data)
                return BST;
            else if (X < BST->Data)
                BST = BST->Left;
            else if (X > BST->Data)
                BST = BST->Right;
        }
        return NULL;
    }
    
    //函数FindMin返回二叉搜索树BST中最小元结点的指针;
    Position FindMin(BinTree BST)
    {
        if (BST == NULL)
            return NULL;
        while (BST->Left)
            BST = BST->Left;
        return BST;
    }
    
    //函数FindMax返回二叉搜索树BST中最大元结点的指针。
    Position FindMax(BinTree BST)
    {
        if (BST == NULL)
            return NULL;
        while (BST->Right)
            BST = BST->Right;
        return BST;
    }

     

  • 相关阅读:
    软件测试人员的年终绩效考核怎么应对
    收藏
    顶踩组件 前后两版
    订阅组件
    hdu 1963 Investment 完全背包
    hdu 4939 Stupid Tower Defense 动态规划
    hdu 4405 Aeroplane chess 动态规划
    cf 414B Mashmokh and ACM 动态规划
    BUPT 202 Chocolate Machine 动态规划
    hdu 3853 LOOPS 动态规划
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/9984835.html
Copyright © 2011-2022 走看看