• [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;
    }

     

  • 相关阅读:
    Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
    linux coreseek-4.1安装
    8个必备的PHP功能开发
    LINUX 下mysql导出数据、表结构
    PHP缩略图类
    PHP文件上传类
    PHP抓取页面的几种方式
    MySQL性能优化的最佳20+条经验
    zend studio9.0.3破解及汉化 windons版
    【转载】【面试经验】PHP中级面试题
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/9984835.html
Copyright © 2020-2023  润新知