[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\n");
        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;
}

 

posted @ 2018-11-19 19:21  Ruohua3kou  阅读(860)  评论(0编辑  收藏  举报