数据结构与算法C++之二分搜索树的删除最大值和最小值节点

本文详细介绍了如何在C++中实现二分搜索树删除最小值和最大值节点的操作,包括无右子节点时直接删除、有右子节点时用右子节点替换,以及无左子节点和有左子节点两种情况下的删除策略。
摘要由CSDN通过智能技术生成

前两篇介绍了二分搜索树以及二分搜索树的遍历,下面介绍二分搜索树删除最大值和最小值节点

(1)根据二叉树的定义,只要从根节点的左节点一直寻找,直到某一个左节点不再有左节点,那么该节点就是最小值
(2)只要从根节点的右节点一直寻找,直到某一个右节点不再有右节点,那么该节点就是最大值
在这里插入图片描述
删除二分搜索树的最小值
(1)如果删除的节点没有右子节点,那么直接删除掉就可以,如下图的最小节点13
在这里插入图片描述
(2)如果删除的节点有右节点,那么将该节点删除后,用其右节点替换其位置,如删除最小节点22,22有右节点,删除22后,就把其右节点33替换其位置
在这里插入图片描述
删除二分搜索树的最大值
(1)如果删除的节点没有左子节点,那么直接删除掉就可以,如下图的最大节点63
在这里插入图片描述
(2)如果删除的节点有左节点,那么将该节点删除后,用其左节点替换其位置,如删除最大节点58,58有左节点,删除58后,就把其左节点50替换其位置
在这里插入图片描述
下面是程序实现

#include <iostream>
#include <vector>
#include <string>
#include <ctime>  //time()函数
#include <queue>
#include <cassert>
#include "FileOps.h"
using namespace std;

template<typename Key, typename Value>
class BST{
   

private:
    struct Node{
   
        Key key;
        Value value;
        Node *left;
        Node *right;

        Node(Key key, Value value){
   
            this->key = key;
            this->value = value;
            this->left = this->right = NULL;
        }
    };

    Node *root;
    int count;

public:
    BST(){
   
        root = NULL;
        count = 0;
    }
    ~BST(){
   
        // TODO: ~BST()
        destroy(root);
    }

    int size(){
   
        return count;
    }

    bool isEmpty(){
   
        return count == 0;
    }

    void insert(Key key, Value value){
   

        root = insert(root,<
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值