二叉树删除节点算法---递归

简介: 二叉树删除节点算法---递归

删除节点

删除一个BST的节点要比插入困难一点,但同样是要遵循一个原则,即:删除节点后仍然要保持“小-中-大”的逻辑关系。

假设要删除的节点是x,大体思路如下:

  • 若要删除的节点小于根节点,则递归地在左子树中删除x
  • 若要删除的节点大于根节点,则递归地在右子树中删除x

若要删除的节点恰好就是根节点,则分如下几种情况:

  • a. 根节点若有左子树,则用左子树中最大的节点max替换根节点,并在左子树中递归删除max
  • b. 否则,若有右子树,则用右子树中最小的节点min替换根节点,并在右子树中递归删除min
  • c. 否则,直接删除根节点

代码:

typedef struct bst
{
    //数据域
    int data;
    //指针域
    struct bst *lchild;
    struct bst *rchild;
}BST, *pBST;
//删除二叉树节点算法
pBST bstDelete(pBST root, int data)
{
    if(root == NULL)
        return NULL;
    //0.如果想删除的节点小于根节点
    if(data < root->data)
    {
        root->lchild = bstDelete(root->lchild, data);
    }
    //如果想删除的节点大于根节点
    else if(data >root->data)
    {
        root->rchild = bstDelete(root->rchild, data);
    }
    //如果想删除的节点等于根节点
    else
    {     
        if(root->lchild != NULL)
        {
            pBST max;
            //找到左子树中最大的来替换删除的节点
            for(max = root->lchild; max->rchild!=NULL; max = max->rchild);
            root->data = max->data;

            //再把左子树中最大的节点删掉
            root->lchild = bstDelete(root->lchild, max->data);
        }
        else if(root->rchild != NULL)
        {
            pBST min;
            //找到右子树中最小的来替换删除的节点
            for(min = root->rchild; min->lchild!=NULL; min = min->lchild);
            root->data = min->data;

            //再把右子树中最小的节点删掉
            root->rchild = bstDelete(root->lchild, min->data);
        }
        else
        {
            return NULL;     //删掉左(右)子树的最大(小)节点
        }
    }
}
相关文章
|
25天前
|
机器学习/深度学习 运维 算法
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
|
1月前
|
机器学习/深度学习 并行计算 算法
基于改进的粒子群算法PSO求解电容器布局优化问题HV配电中的功率损耗和成本 IEEE34节点(Matlab代码实现)
基于改进的粒子群算法PSO求解电容器布局优化问题HV配电中的功率损耗和成本 IEEE34节点(Matlab代码实现)
|
25天前
|
并行计算 算法 安全
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 数据挖掘
基于自适应遗传算法风光场景生成的电动汽车并网优化调度【IEEE33节点】(Matlab代码实现)
基于自适应遗传算法风光场景生成的电动汽车并网优化调度【IEEE33节点】(Matlab代码实现)
|
5月前
|
SQL 分布式计算 DataWorks
使用DataWorks PyODPS节点调用XGBoost算法
本文介绍如何在DataWorks中通过PyODPS3节点调用XGBoost算法完成模型训练与测试,并实现周期离线调度。主要内容包括:1) 使用ODPS SQL构建数据集;2) 创建PyODPS3节点进行数据处理与模型训练;3) 构建支持XGBoost的自定义镜像;4) 测试运行并选择对应镜像。适用于需要集成机器学习算法到大数据工作流的用户。
201 24
|
5月前
|
传感器 算法 数据安全/隐私保护
基于GA遗传优化的三维空间WSN网络最优节点部署算法matlab仿真
本程序基于遗传算法(GA)优化三维空间无线传感网络(WSN)的节点部署,通过MATLAB2022A实现仿真。算法旨在以最少的节点实现最大覆盖度,综合考虑空间覆盖、连通性、能耗管理及成本控制等关键问题。核心思想包括染色体编码节点位置、适应度函数评估性能,并采用网格填充法近似计算覆盖率。该方法可显著提升WSN在三维空间中的部署效率与经济性,为实际应用提供有力支持。
|
7月前
|
存储 算法 Java
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
202 10
 算法系列之数据结构-二叉树
|
8月前
|
存储 算法 Java
算法系列之递归反转单链表
递归反转链表的基本思路是将当前节点的next指针指向前一个节点,然后递归地对下一个节点进行同样的操作。递归的核心思想是将问题分解为更小的子问题,直到达到基本情况(通常是链表末尾)。
212 5
算法系列之递归反转单链表
|
8月前
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。
301 16
|
9月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
270 3

热门文章

最新文章