zoukankan      html  css  js  c++  java
  • 二叉排序树的实现

    1. 编写SearchBST(T, key)与InsertBST(T, key)的伪代码,并实现

    查找

    //伪代码
    SearchBST(T, key)
    {
        if (T为空 || T->key == key)
            return T;
        if (key > T->key)
            return SearchBST(T->rchild, key);
        else
            return SearchBST(T->lchild, key);
    }
    //代码实现
    BSTree SearchBST(BSTree T,int key)
    {
        if (T == NULL || T->key == key)
            return T;
        if (key > T->key)
            return SearchBST(T->rchild, key);
        else
            return SearchBST(T->lchild, key);
    }
    

    插入

    //伪代码
    InsertBST(T, key)
    {
        if(T为空)
        {
            T->key = key;
            T->lchild = T->rchild = NULL;
        }
        else if (key == T->key)
            return;
        else if(key > T->key)
            Insert(T->rchild, key);
        else
            Insert(T->lchild, key);
    }
    
    //代码实现
    void InsertBST(BSTree &T,int key)
    {
        if(T == NULL)
        {
            T = new BSTNode;
            T->key = key;
            T->lchild = T->rchild = NULL;
        }
        else if (key == T->key)
            return;
        else if(key > T->key)
            InsertBST(T->rchild, key);
        else
            InsertBST(T->lchild, key);
    }
    

    2. 编写CreateBST(T)的伪代码实现从控制台输入创建BST树。最后使用代码实现。使用“50 30 80 20 40 90 10 25 35 85 23 88”创建BST,并中序输出该BST

    创建

    //伪代码
    CreateBST(n) //n为输入的数据量
    {
        for (i = 0; i<n; i++)
        {
            cin >> key;
            InsertBST(T, key);
        }
        return T;
    }
    
    //代码实现
    BSTree CreateBST(int n)
    {
        BSTree T = NULL;
        int key;
        for (int i = 0; i<n; i++)
        {
            cin >> key;
            InsertBST(T, key);
        }
        return T;
    }
    

    输出效果:

    3. 编写DeleteBST(T, key)的伪代码实现从T中删除关键字key。如果无法编写出来,请写出在BST中删除关键字key所需注意的事项。

    //伪代码
    DeleteBST(T, key)
    {
        if (T为空)
        {
            return;
        }else
        {
            if (key < T->key)
            {
                DeleteBST(T->lchild, key);
            }
            else if (key > T->key)
            {
                DeleteBST(T->rchild, key);
            }else
            {
                DeleteT(T); //调用删除结点函数
            }
        }
    }
    DeleteT(T)
    {
        if (T->rchild 为空)
        {
            p = T;
            T = T->lchild;
            删除结点p;
        }else if (T->lchild 为空)
        {
            p = T;
            T = T->rchild;
            删除结点p;
        }else
        {
            DeleteTree(T,T->lchild); //结点p左右子树均存在时,调用另一删除函数
        }
    }
    DeleteTree(T,r)
    {
        if (r->rchild 不为空)
        {
            DeleteTree(T,r->rchild); //找到最右结点
        }else
        {
            T->key = r->key;
            p = r;
            r = r->lchild;
            删除结点p;
        }
    }
    

    4. 选做:使用代码实现DeleteBST(T, key)

    //代码实现
    void DeleteBST(BSTree &T,int key)
    {
        if (T == NULL)
        {
            return;
        }else
        {
            if (key < T->key)
            {
                DeleteBST(T->lchild, key);
            }
            else if (key > T->key)
            {
                DeleteBST(T->rchild, key);
            }else
            {
                DeleteT(T); //调用删除结点函数
            }
        }
    }
    void DeleteT(BSTree &T)
    {
        BSTree p;
        if (T->rchild == NULL)
        {
            p = T;
            T = T->lchild;
            delete p;
        }else if (T->lchild == NULL)
        {
            p = T;
            T = T->rchild;
            delete p;
        }else
        {
            DeleteTree(T,T->lchild); //结点p左右子树均存在时,调用另一删除函数
        }
    }
    void DeleteTree(BSTree &T,BSTree &r)
    {
        BSTree p;
        if (r->rchild)
        {
            DeleteTree(T,r->rchild);
        }else
        {
            T->key = r->key;
            p = r;
            r = r->lchild;
            delete p;
        }
    }
    

    效果(删除30):

  • 相关阅读:
    IDirect3DDevice9::Clear
    Width vs Pitch
    5- vue django restful framework 打造生鲜超市 -完成商品列表页(上)
    4- vue django restful framework 打造生鲜超市 -restful api 与前端源码介绍
    3- vue django restful framework 打造生鲜超市
    2- vue django restful framework 打造生鲜超市 -环境搭建
    1- vue django restful framework 打造生鲜超市
    Scrapy分布式爬虫打造搜索引擎- (二)伯乐在线爬取所有文章
    windows10上安装mysql
    博客开通第一天
  • 原文地址:https://www.cnblogs.com/wzt392217419/p/12731208.html
Copyright © 2011-2022 走看看