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):

  • 相关阅读:
    RE
    【LeetCode】198. House Robber
    【LeetCode】053. Maximum Subarray
    【LeetCode】152. Maximum Product Subarray
    【LeetCode】238.Product of Array Except Self
    【LeetCode】042 Trapping Rain Water
    【LeetCode】011 Container With Most Water
    【LeetCode】004. Median of Two Sorted Arrays
    【LeetCode】454 4Sum II
    【LeetCode】259 3Sum Smaller
  • 原文地址:https://www.cnblogs.com/wzt392217419/p/12731208.html
Copyright © 2011-2022 走看看