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

     

  • 相关阅读:
    bootstrap 模态框日期控件datepicker被遮住问题的解决
    (转)Jetty实战之 安装 运行 部署
    (转)Redis研究(一)—简介
    在jboss上部署web应用
    webSphere
    Weblogic部署项目三种方式
    js构造函数详解
    范仁义js课程---51、作用域实例
    javascript疑难问题---7、使用var和不使用var声明变量的区别
    范仁义js课程---50、函数作用域
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/9984835.html
Copyright © 2011-2022 走看看